大佬们,想请问下内存分区的问题
c语言吧
全部回复
仅看楼主
level 1
tianyuanjin
楼主
2023年05月19日 07点05分
1
level 1
tianyuanjin
楼主
我上网搜了一下,有些不是很懂的地方:
①按照道理来说,栈区的地址不是应该比堆区高吗,为啥我这堆区地址比栈区高呀
②初始化的静态全局变量存放在全局区,为啥地址比常量区的字符串低呢
2023年05月19日 07点05分
2
level 1
欧洲兔叽💤
每个系统不一样,你把这个实验放linux系统上应该就对了
2023年05月19日 09点05分
3
tianyuanjin
好的 下次试试
2023年05月19日 11点05分
吧务
level 14
GTA小鸡
1.用%d输出指针值是错误的,对于64位程序,这样做只会输出低32位。输出指针值的正确转换说明符是%p。
2.内存空间没有绝对的位置关系,不存在“栈区地址一定比堆区高”的说法。内存地址取决于多种复杂因素。对于栈空间,它的地址取决于镜像基址+栈基址。对于堆空间,在liunx中malloc()对应的系统调用是brk()或mmap()。对于brk(),它的本质就是在.data段尾部继续分配空间,而对于mmap(),它是让操作系统映射一块空闲的地址空间。可以用/proc/pid/maps来查看指定pid进程的内存空间划分。
2023年05月19日 09点05分
4
tianyuanjin
后面那个我就不是很懂了
不过前面我确实用%p试过,高位上都是0,相对大小和用%d的结果类似
2023年05月19日 11点05分
tianyuanjin
我在网上查都是栈区处于高地址
2023年05月19日 11点05分
吧务
level 14
GTA小鸡
首先Windows和Linux的内存模型不同,你看的网文介绍的可能是Linux中的典型内存布局。
其次内存的分配可以非常离散,尤其是在启用ASLR时更是如此。
“堆内存在低地址,栈内存在高地址”只是其中一种可能的模型,即便在Linux中也不一定成立。
2023年05月19日 11点05分
5
tianyuanjin
哇这么复杂嘛。。。因为老听说内存四区啥的,我百度搜的内存四区模型都是栈区-堆区-全局区-常量区-代码区这个,原来这么复杂呀
2023年05月19日 12点05分
起个名字😂😂
这是什么书
2023年05月19日 23点05分
level 9
起个名字😂😂
操作系统封装好了,了解这些没意义,知道堆栈即可
2023年05月20日 00点05分
6
1