特定内存分配 - C ++

时间:2014-08-12 16:06:28

标签: c++ memory-management

是否可以在特定地址中分配内存? 有没有解决这个问题的功能?

3 个答案:

答案 0 :(得分:4)

不确定。您可以使用名为展示位置new的内容。

如果您使用非常小的RAM定位移动平台,或者您正在编写内存池,那么它非常有用。

请注意,除非您的可执行文件具有特殊权限(例如内核扩展名),否则您必须拥有您分配的内存。

一个(无用的)例子:

// Assuming you can access and read/write at 0x1234ABCD
unsigned char* ptr = reinterpret_cast<unsigned char*>(0x1234ABCD);
// Allocate a std::string at ptr
std::string* foo = new(ptr) std::string;

答案 1 :(得分:3)

要在特定地址分配,您需要使用特定于操作系统的API。但是,如果您具有分配的空间和地址,则可以使用new with placement运算符在分配的空间内的地址处构造对象。分配的空间也可以来自对char数组的new调用,或类似的简单。

答案 2 :(得分:2)

我只知道在Linux下执行此操作的方法,您需要使用mmap调用,它允许您按如下方式请求特定地址:

void *foo = (void *)0xDEADBEEF;
size_t MyLength = 1024;
void *bar = mmap(foo, MyLength
    , PROT_READ | PROT_WRITE | MAP_ANONYMOUS | MAP_FIXED, MAP_PRIVATE, -1, 0);

注意如果地址已被使用或者不是页面大小的倍数(512或4k字节),这将失败