我希望为类的堆栈分配实例调用一个特殊的构造函数/析构函数,并且:
或者
这可以移植吗?
我为什么要这样做?
我正在编写一个容器类库,其中包含一个潜在的大型动态分配缓冲区。
从概念上讲,它应该像这样工作:
class SArray(){
size_t size;
char* data;
SArray(size_t _size):size(_size){
data = (char*)malloc(size);
}
~SArray(){
free(data);
}
... Some operators, etc. ...
}
Run Code Online (Sandbox Code Playgroud)
然而,这对我所在领域(高性能机器人)的用户来说是一个重大的放缓。当您从系统分配时,大分配首先映射到零页,当您写入它们时会导致页面错误,然后 - 出于安全原因 - 内核在将数据提供给您之前花费大量时间将数据清零。我的用户倾向于分配许多小缓冲区(sub-KB)和非常大的缓冲区(1-1000 MB)。
如果我们可以确定以 LIFO(stack) 顺序调用构造函数和析构函数,那么我们就可以拥有一个巨大的虚拟堆栈来进行内存分配:
class SArray(){
static char backing_stack[1000000000000]; // 1TB, at least as big as all of RAM
static sp = 0;
size_t size;
char* data;
SArray(size_t _size):size(_size){
data = backing_stack + sp;
sp += size;
}
~SArray(){
sp -= size;
}
... Some operators, …Run Code Online (Sandbox Code Playgroud)