我有一个关于 64 位机器中的 malloc 的问题。我想知道 malloc 是否可以只从较低的 32 位地址分配内存。例如,仅将内存从0xcfffffff分配给0xffffffff,就像在 32 位计算机中一样。
感谢您的帮助。
更新:目前,我正在尝试为使用 OpenCL 的 GPU 设备实现内存管理工具。为此,我需要从 OpenCL 拦截创建内存的 API,并自行重新实现它们。换句话说,我在主机端为 GPU 设备实现了虚拟内存。问题是,在NVIDIA cuda中,即使在64位机器中,OpenCL也只有32位内存ptrs。因此,每次我在主机端错误定位内存并尝试将其视为 OpenCL 内存时,较高的 32 位将被截断。因此,如果我只能降低 32 位,那么就不会有问题。
您必须创建自己的内存分配器。首先是使用操作系统服务(取决于系统)在较低的 32 位范围内分配页面。然后使用函数从这些页面分配内存。
No.
malloc()
不受您的控制,无法从您需要的位置分配内存。它是通过使用作为参数传递的大小进行malloc()
在内部完成的。