我遇到了一个我似乎无法解决的 mmap 问题。下面是设置:我使用 malloc 将一个巨大的多维数组分配到内存中,用我的值填充它,然后我想将它保存在一个文件中。该数组包含 3200000000 个字节。机器是 64 位的,有足够的内存。
Linux 2.6.32-27-server #49-Ubuntu SMP Thu Dec 2 02:05:21 UTC 2010 x86_64 GNU/Linux
使用 mmap 创建文件工作正常,我得到了 ptrFile 指针。 当我将我的数组 memcpy 到那个 ptrFile 指针时,程序因段错误而崩溃。
经过几次调试,我发现两个缓冲区重叠了。数据数组从地址 0x7FEC47FFF010 开始,mmap 返回的指针是 0x7FEA2543E000。我尝试使用 memmove 来解决这个问题,但结果是一样的。如果我将复制到文件的大小限制为 1000 字节,它就可以正常工作。
两个分配的指针怎么重叠了?
非常感谢!
-- J
最佳答案
那些内存区域不重叠(只要您的mmap
block 是您所说的大小)。 0x7FEC47FFF010
- 0x7FEA2543E000
= 9,172,684,816
, 这比 3,200,000,000
的大小大得多你提到的。
关于c - mmap 期间 memcpy 重叠的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7345114/