内存可分为4段,或者有人说是5段云云。
可是,内存为什么要这样分配呢?
这里的内存应该指的是虚拟内存吧,这样分配之后,再通过段页式存储机制映射到实际的物理内存,岂不挺麻烦的? 比如:char *p3 = "123456"; // 123456\0在常量区,p3在栈上。 这样把程序分解的支离破碎的到底是否能真的提高效率?
还有,代码区是个什么啊,不是把代码都解体了吗,该去栈的到栈里去个,该去静态区的区静态区。
我说的虚拟内存指的是虚拟地址空间,比如linux就有4G的虚拟内存。
还是上面那个问题:char *p3 = "123456"; // 123456\0在常量区,p3在栈上。
程序是在编写的时候,就把相应的值写到对应的内存区吗,还是编译的时候才分配的?或者说是运行的时候才写到对应区的?
【虚拟内存和虚拟地址空间 两个概念不指名,就容易混淆了】
常量区的数据在链接的的时候就放入*.exe的数据区, 所有数据区的东西在读入内存时候, 都放入常量区
虚拟内存和虚拟地址空间是完全不同的概念.
32位的CPU都只有4G的寻址空间.虚拟不虚拟无关系.