何时使用alloca为类成员释放内存?

bal*_*lki 3 c++ alloca initializer-list

class MyString
{
  public:
  MyString(int length):_ptr(alloca(length))
  {
  }
  //Copy Constructor, destructor, other member functions.
  private:
  void* _ptr;
};

int main()
{
  MyString str(44);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它是在main函数的末尾释放还是在构造函数执行后立即释放?如果上面的代码按预期工作,那么有一个像这样的字符串类是一个好主意吗?

更新:

看起来主要的危险是

  1. 堆栈溢出
  2. 内联构造函数

我想我可以通过使用alloca来实现小尺寸和malloc/free来处理大尺寸的StackOverflow.我想必须有一些非可移植的编译器特定方式来强制编译器内联.

我感兴趣,因为字符串类是在任何c ++项目中广泛使用的东西.如果我做对了,我期望获得巨大的性能提升,因为大多数分配都会进入堆栈,否则会进入堆.这将是一个实用程序,最终用户将不会意识到内部.

Ski*_*izz 5

根据alloca的文档,当alloca的调用者返回时释放内存.因此,如果编译器将初始化列表视为构造函数的一部分,则将在构造函数的末尾释放内存,即在执行初始化列表之前创建堆栈帧.如果在执行初始化列表之后创建堆栈帧,则分配的内存将位于构造函数的调用者中,因此,在这种情况下,内存将在main的末尾释放.我不知道标准是否足以绝对确定它将以何种方式发生.

但是,ptr每当最终释放内存时,值将保持不变.