gpt4 book ai didi

c++ - 指针值超过可用内存?如何?

转载 作者:行者123 更新时间:2023-11-30 02:38:37 26 4
gpt4 key购买 nike

我致力于 Peano-Hilbert 数据排序(c++ 4.9,linux 64x)以合并动态分配的内存。为了控制,我试图可视化内存中的实际数据分布。为此,我将指向我的数据的指针转换为整数,如下所示

unsigned long int address =  *(unsigned long int*)(&pointer);

然后将它们绘制成一些二维 map 。它在大多数情况下工作正常,但有时我得到的值超过可用内存,例如140170747903888,对应于 ~127 TB 的偏移,而我只有 16 GB 的 RAM。我勒个去?

最佳答案

内存管理系统不以线性方式处理内存。可以随意告诉进程某个内存块位于地址 0x1234123412345678 中,即使您只有 128MB 的内存。这称为分页。数据甚至可能不在物理内存中,而是分页到磁盘。

这意味着你无法知道指针值在物理内存中的什么位置,因为它可能一直在变化(或者它甚至可能不在内存中),你只知道操作系统的虚拟地址碰巧给了你。它完全取决于实现方式,它是如何发出它们的。

关于c++ - 指针值超过可用内存?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30659398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com