代码段(codegmenttextgment)、数据段(datagment)、。。。

更新时间:2023-05-16 03:10:43 阅读: 评论:0

代码段(codegmenttextgment)、数据段
fdp
(datagment)、。。。
在Linux进程地址空间布局中,从物理上,数据(ur data, sys data) 和指令,都是“数据”,但是从逻辑上来讲,来是有区别的,不同的数据,属性不⼀样。有些数据是指令,只读,不可写,有些数据可写,有些数据只可读,有些数据⼀开始就存在,有些数据,⽤的时候才存在,⽤完就没有......
从逻辑层⾯(操作系统)把数据分成不同的段(不同的区域)来存储:
⼀、代码段(codegment/textgment):
⼜称⽂本段,⽤来存放指令,运⾏代码的⼀块内存空间
此空间⼤⼩在代码运⾏前就已经确定
内存空间⼀般属于只读,某些架构的代码也允许可写
在代码段中,也有可能包含⼀些只读的常数变量,例如字符串常量等。
⼆、数据段(datagment):
come back
深圳北大青鸟
可读可写
存储初始化的全局变量和初始化的static变量
数据段中数据的⽣存期是随程序持续性(随进程持续性)
随进程持续性:进程创建就存在,进程死亡就消失
三、bss段(bssgment):
可读可写
存储未初始化的全局变量和未初始化的static变量varian
bss段中数据的⽣存期随进程持续性泰坦尼克号主题曲歌词
bss段中的数据⼀般默认为0
四、rodata段:
只读数据
⽐如printf语句中的格式字符串和开关语句的跳转表。也就是你所说的常量区。例如,全局作⽤域中的 const int ival = 10,ival存放在.rodata段;再如,函数局部作⽤域中的printf("Hello world %d\n", c);语句中的格式字符串"Hello world %d\n",也存放在.rodata 段。
五、栈(stack):
youngchildren
可读可写
存存储的是函数或代码码中的局部变量(⾮static变量)
栈的⽣存期随代码块持续性,代码块运⾏就给你分配空间,代码块结束,就⾃动回收空间
六、堆(heap):
可读可写
存储的是程序运⾏期间动态分配的 malloc/realloc的空间
堆的⽣存期随进程持续性,从malloc/realloc 到free⼀直存在
inches是什么意思进程地址空间和⽤户、内核的关系:
appeal to
健身私人教练的培训机构eg:前辈写的⼀个经典例⼦
2012奥运会吉祥物
int a = 0;    //全局初始化区
char *p1;    //全局未初始化区
main()
{
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”优化成⼀个地⽅}

本文发布于:2023-05-16 03:10:43,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/648824.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:SAP各层级概念
标签:数据   进程   代码   持续性   只读   字符串
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图