ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

内存空间分布

2021-11-19 11:04:25  阅读:139  来源: 互联网

标签:初始化 全局变量 int 内存空间 char 静态 分布 123456


.code或.text,代码段:用来存放可执行的机器指令的一块内存区域,这部分区域的代码属于只读。字符串常量也在也在代码段上。

.data,数据段:用来存放程序中已初始化的全局变量的一块内存区域,例如已初始化的全局变量和局部静态变量(初始化为非0)。

.bss:用来存放程序中未初始化的全局变量的一块内存区域,例如未初始化的全局变量和局部静态变量(未初始化或初始化为0)。

data段(初始化的段),bss(未初始化的段)都是针对全局变量和静态变量来说的。

data又分为读写数据段,和只读数据段。

bss是未初始化的全局变量和静态变量,以及初始化为0的全局变量和静态变量。

堆(heap):用来存放进程运行中被动态分配的内存段,大小并不固定,可动态扩张或缩减,典型操作malloc和free。堆的申请过程比较复杂,当系统收到程序的申请时,会遍历记录空闲内存地址的链表,以寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

栈(stack):存放程序的局部变量,以及函数调用时候,栈用来传递参数和返回值。由于栈的先进后出的特点,特别方便用来保存和回复调用现场。

 

程序举例:

int a = 0;   // 全局初始化区 char *p1;    // 全局未初始化区
int main(int argc, const char *argv[]) {     int b;                // 栈     char s[] = "abc";     // 栈     char *p2;             // 栈     char *p3 = "123456";  // 123456\0在常量区,而p3在栈上
    static int c = 0;     // 全局(静态)初始化区     p1 = (char *)malloc(10);     p2 = (char *)malloc(20); // 分配得来得10和20字节的区域在堆区     strcpy(p1, "123456");    // 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
    return 0; }

 

标签:初始化,全局变量,int,内存空间,char,静态,分布,123456
来源: https://www.cnblogs.com/bwin/p/15576109.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有