Jac*_*ngs 9 c++ operator-overloading
在具有两个独立RAM存储区的嵌入式系统中,我有两个不同的堆(一个是来自较低内存区域的FreeRTOS的自定义实现,另一个是GCC在高端内存区域中生成的堆),我希望能够选择新使用的堆.
Mil*_*nek 13
你可以提供一个operator new接受第二个参数的重载,告诉它从哪个内存区分配内存.您可以operator new通过在new-expression中的类型之前将它们放在括号中来提供参数.这通常用于将new对象分配到已经分配的存储中(因为这是标准库提供的重载),但是任何东西都可以在那里传递并传递给它operator new.
enum MemoryArea {
LOWER,
UPPER
};
void* operator new(std::size_t sz, MemoryArea seg) {
if (seg == LOWER) {
return allocateMemoryInLowerMemoryArea(sz);
} else {
return allocateMemoryInUpperMemoryArea(sz);
}
}
void operator delete(void* p) {
if (pointerIsInLowerMemoryArea(p)) {
freeMemoryFromLowerMemoryArea(p);
} else {
freeMemoryFromUpperMemoryArea(p);
}
}
int main() {
Foo* p = new (LOWER) Foo;
Foo* b = new (UPPER) Foo;
delete p;
delete b;
}
Run Code Online (Sandbox Code Playgroud)