为了在限制条件下测试软件,我尝试创建一个测试用例,其中提供的用户缓冲区分配在某个非常低的内存地址处。非常接近 NULL
的内容,例如 0x1000h
。
事实证明,这是一个很难创造的条件。
实际上,我无法在 Linux、BSD、Windows 或 OS-X 上使用 malloc()
生成它。
我确信这种情况也可能发生在其他类型的设备上,但我需要一个可以插入到 CI 测试套件中的可重现的测试用例。
是否有任何已知的具有中等复杂性(和依赖性)的方法来生成此类条件?
编辑:选择解决方案 proposed by Eric Postpischil ,使用mmap()
。请注意,as underlined by R. ,首先需要降低最低地址限制,可在 /proc/sys/vm/mmap_min_addr
(在 Linux 上)读取。
sudo sysctl -w vm.mmap_min_addr="4096"
然后是示例代码:
#include <stdio.h> /* printf */
#include <sys/mman.h> /* mmap */
int main(int argc, const char** argv)
{
void* lowBuff = mmap((void*)(0x1000), 64<<10,
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS,
-1, 0);
printf("lowBuff starts at %p \n", lowBuff);
}
结果:
lowBuff starts at 0x1000
最佳答案
在 POSIX/Unix 系统上,您可以使用 mmap
来请求特定页对齐地址处的内存。您可以获得的最低值取决于您的特定系统和环境。
关于c - 在低内存地址分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48631207/