C++的内存划分?

lhyxiaolang 2014-10-24 02:42:06
又不有点权威的参考文档,书籍?

在网上查资料看到:两种说法,一种是分为 栈,堆,自由存储区,全局,常量;第二,堆,栈,全局,常量,程序代码区,到底哪一个是对的呢?我个人一直是理解堆和自由存储区是一种东西,这个程序代码区是个什么内存?请解答一下疑惑

...全文
122 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyinman 2014-10-24
  • 打赏
  • 举报
回复
linux c/c++程序的内存分布图


代码区存放代码

文字常量区存放字符串常量,比如 char *s = “hello world”; 后面的字符串就存放在这个区域

全局静态区存放全局变量和静态局部变量,具有全生存周期,其中bss段存放未初始化变量,系统自动默认初始化为0,data段存放初始化的全局静态变量

栈区向上增长,存放局部变量,函数参数等。堆空间存放你new或者malloc出来的空间存放的数据。
堆空间上面是存放程序执行的参数的字符串,就是int argc,char*argv[]表示的东西。
再往上存放的是程序执行所需的环境变量的字符串。
JiangWenjie2014 2014-10-24
  • 打赏
  • 举报
回复
学过汇编的都知道,一个可执行程序如果要能够让操作系统加载运行,那么在内存中通常有代码段,数据段和栈段,代码段可读可执行,数据段可读可写,栈段可读可写。至于全局数据,如果从汇编的角度,可以单独放到一个段中,也可以放到数据段的某个位置。然而对于高级语言来说,不可能直接在代码中指定这个数据必须放在哪里,因此出现了什么专门放置常量的地方,放置静态数据的地方,放置全局数据的地方等等,这些都是由编译器替我们决定的。所以如果你非得搞清楚,那就只能去研究编译器了,否则要是懂一点汇编的话,不会去纠结这个东西的。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧