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

** 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语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是...
    一生信仰阅读 1,223评论 0 2
  • 一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器...
    shannoon阅读 1,418评论 0 1
  • C语言编程程序的内存如何布局 C语言程序连接过程中的特性和常见错误 C语言程序的运行方式 一:C语言程序的存储区域...
    鬼谷神奇阅读 1,721评论 0 1
  • 人生处处凶险,时时拎得清,方能走得远。食得咸鱼抵得渴,谁没有“纵然举案齐眉,到底意难平”的憾事?只是,爱惜自己的女...
    燕子的留声馆阅读 1,195评论 0 1
  • 我已经很久没有对我家的财政部长申请批款了,倒是总接到“部长”对我的嘘寒问暖:“钱够么?不够要说!”回想过去十多年跟...
    南半球的老太太阅读 805评论 3 8