小编Pau*_*Hat的帖子

在 C++ 中为堆栈分配的变量编写不同的构造函数/析构函数

我希望为类的堆栈分配实例调用一个特殊的构造函数/析构函数,并且:

  1. 禁止所有其他情况(我认为这是不可能的)。

或者

  1. 让他们调用不同的构造函数/析构函数。

这可以移植吗?

我为什么要这样做?
我正在编写一个容器类库,其中包含一个潜在的大型动态分配缓冲区。
从概念上讲,它应该像这样工作:

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)

c++ memory heap-memory

5
推荐指数
0
解决办法
93
查看次数

标签 统计

c++ ×1

heap-memory ×1

memory ×1