首页
社区
课程
招聘
[旧帖] 关于C++程序的内存分配 0.00雪花
发表于: 2011-10-2 14:53 4130

[旧帖] 关于C++程序的内存分配 0.00雪花

2011-10-2 14:53
4130
即所谓C/C++程序将内存分为堆区、栈区、静态/全局变量区、常量区
关于这个的理论网上一搜一大把

但我在学C++时用的书(C++ Primer/the C++ program language)上却从来没看到过这种说法
上网搜英文资料,“C++ program Memory allocation”方面的,也未看到过这种分配方法!!

请问大家这样的说法有根据吗?在什么资料上能查到权威的说法?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 31
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不管什么样的操作系统,什么样的计算机架构,进程使用的内存都可以按照功能分成以下四个部分:
(1)代码区:这个区域存储着被装入执行的二进制代码,处理器会到这个区域取指令并执行。
(2)数据区:用于存储全局变量等。
(3)堆区:进程可以在堆区动态的请求一定大小的内存,并在用完之后归还给堆区。
(4)栈区:用于动态的存储函数之间的调用关系,以保证被调用函数在返回时恢复到调用函数中继续执行。
上面引用自:《0day安全》
其实这种简单划分是让你更容易理解程序的运行机制,你说的那些关于内存的划分也都是这个原因。你要是想了解更详细的看下《windows核心编程》中内存体系结构那课。
2011-10-3 06:10
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
这些底层实现东西都已经被高级语言所隐藏起来了, 不需要普通用户关心

那些书没提是怕是读者迷惑,毕竟是面向大众的书, 而内存布局/分配 不是每个人都需要关心的

或者说需要关心的时候比较少
2011-10-3 14:18
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
对的,面向大众的书不需要讲解这些。对于普通的程序开发,只需要知道这些内存区哪些是我们用户自己管理的(堆内存,new alloc申请的等),哪些是由系统管理的(栈内存等)就足够了。windows核心编程里确实有说
2011-10-3 21:13
0
雪    币: 220
活跃值: (121)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
你看的这些C++ Primer属于初中级,
the C++ program language属于语言规范而不是具体实现。

你这个问题请看
深度探索C++对象模型
http://book.douban.com/subject/1091086/
有部分介绍
2011-10-3 22:59
0
雪    币: 43
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
(1)从静态存储区分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量
(2)从栈上创建。在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。
(3)从堆上分配。亦称动态内存分配,程序早运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete 释放内存。动态内存的生存周期由程序员决定,使用非常灵活,但问题也最多。
2011-10-3 23:02
0
雪    币: 93
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢大家的提示
从汇编角度考虑,汇编的框架就是.DATA, .CODE, .STACK, 没那么多其它的概念
不知道这种说法在国外有没有
2011-10-4 21:48
0
游客
登录 | 注册 方可回帖
返回
//