C++的区划分
C++的内存可划分为五个区,具体就不写了,但这些区的划分是哪里规定的呢?编译的时候为什么一定要这样做?谁能给个说法,谢谢
[解决办法]
不是谁规定的吧, 是从实际使用中总结来分类出来的吧.
就好比动物分成哺乳动物, 昆虫... 之类的.
[解决办法]
从不知道这个划分。
有些系统中没有常量区,所谓“常量区”,其实就是静态区的一种,依靠分页机制来让它只读(如果使用远指针也可以用分段机制,远指针很影响效率),如果在没有分页机制的系统中,就不会有“常量”区。
“堆”和“静态区”其实都不过是“数据区”,一般静态区在下面,堆在上面。所以堆能增长而静态区不能——它一增长就把堆给冲了。
所以,其实程序的内存只有“数据”、“代码”和“栈”,而“栈”一般是和“数据”区重合的,以保证可以用数据指针访问栈中的内存。
[解决办法]
感觉上这应该是国产教材杜撰出来的说法。
栈和堆显然不是“区”,多线程模式,每个线程都要有一个栈,栈是在自由空间里申请的;堆也是自由空间上建立的高级逻辑,一个程序可以有好几个堆。常量区依赖内存管理机制,没用内存管理器的DOS上常量就是作为普通静态数据处理的。
反过来说之所以有这么几个区,因为有这么几类的内存访问模式:给函数存局部变量的栈,动态管理内存的堆,放全局变量的静态内存,放常量的只读静态内存,放代码的可执行内存,还有剩下的。...话说怎么是六个?