c - mmap 期间 memcpy 重叠的段错误

标签 c

我遇到了一个我似乎无法解决的 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/

相关文章:

c++ - 通过 fork 和 pipeline 调用 gnuplot 并更新绘图

c++ - 在 C 与 C++ 中使用函数调用初始化全局变量

c - 如何在被调用方中获取参数整数?

python - ctypes 和 c dll 之间交换数据的正确方法是什么?

c++ - C 和 C++ 差异行为

C将字符串拆分为字符串数组

c - 在整数数组中查找最大/最小出现次数

编译器警告 "differ in signedness"

javascript - 用 javascript 编写的 C 解释器

c - 我如何从C中的文件中读取