美文网首页
【C】C程序在内存中的布局

【C】C程序在内存中的布局

作者: ytlm | 来源:发表于2016-06-09 23:54 被阅读194次

** C程序在内存中的布局大致如下图所示 **


内存布局

从上到下依次是栈空间,堆空间,bbs段,data段,文本段

栈(stack)

1,地址空间由高向低减少,先分配高地址。
2,由编译器自动分配释放,主要存放函数参数,局部变量的值。
3,C语言函数参数进栈的顺序是从右向左(主要是为了支持可变长参数形式)。

堆(head)

1,主要用于动态分配内存,malloc等函数,由free释放。

静态存储区包括bbs段和data段

bbs(bbs)

1,存放一些未初始化的全局变量。

data(data)

1,存放一些已经初始化的全局变量,静态变量和常量。

text(text)

1,存放程序执行代码的区域,区域大小在运行的时候就已经确定了。
2,内存区域只读的,也可能包含一些只读的常数变量,字符串常量等。

一个非常清晰的程序图

//main.c
int a = 0;//全局初始化区
char *p1;//全局未初始化区
int main()
{
  static int c = 0;//全局(静态)初始化区
  int b;//栈区
  char s1[] = "abc";//"abc\0"在常量区,s1栈区
  char s2[] = "abc";//"abc\0"在常量区,s2栈区
//s1和s2是不想等的
  char *p2;//栈区
  char *p3 = "123456";//"123456\0"在常量区,p3在栈区
  char *p4 = "123456";//"123456\0"在常量区,p4在栈区
//p3和p4是一样的,都只想同一个位置"123456\0"所在位置
  p1 = (char *)malloc(10);
  p2 = (char *)malloc(20);//分配得来的10和20字节的区域在堆区
  return 0;
}

如有问题欢迎批评指正,谢谢!

相关文章

  • C语言的内存布局

    C语言编程程序的内存如何布局 C语言程序连接过程中的特性和常见错误 C语言程序的运行方式 一:C语言程序的存储区域...

  • Objective-C 引用计数的原理和内部实现

    背景 - 内存管理 Objective-C 建立在 C 语言的基础上。C 语言程序的内存布局主要包括: 栈:由编译...

  • 必须知道的C语言知识细节:C程序编译后内存到底是如何布局

    C语言程序编译以后,代码和数据都必须存放在内存中由CPU执行。理解C程序内存是如何划分布局,才能真正理解C语言中变...

  • Objective-C的内存布局

    Objective-C的内存布局 在Objective-C中任何的类定义都是对象。即在程序启动的时候任何类定义都对...

  • 【C】C程序在内存中的布局

    ** C程序在内存中的布局大致如下图所示 ** 从上到下依次是栈空间,堆空间,bbs段,data段,文本段 栈(s...

  • C++之内存布局

    在C++之内存管理一文中,我们已经了解到C++的内存管理,这里介绍C++的典型内存布局结构。 1、总体来说,C/C...

  • C/C++程序的内存布局

    referenceMemory Layout of C Programshttp://www.jianshu.co...

  • C程序的内存布局

    学习了操作系统的一些基本知识之后,有必要对C程序的结构进行一下学习,事实上它并不是那么简单,这篇文章就对C语言程序...

  • C程序的内存布局

    一个典型的C程序内存表现组成应该有以下几个部分: 代码段/文本段(Text segment) 初始化数据段(Ini...

  • c++ 中 struct 的内存布局

    C++ or C 这里讨论的是 C++, 在C中内存布局差不多,但是也不尽相同。如一个空的struct,c++中大...

网友评论

      本文标题:【C】C程序在内存中的布局

      本文链接:https://www.haomeiwen.com/subject/rfmddttx.html