动态分配:缓冲区vs内存堆栈



我将分配一个新对象,而不使用任何 new 操作符。我找到了两种方法:

第一个使用了一个额外的缓冲区(它需要被跟踪):

char buffer[BUFFER_SIZE];
char *pos = buffer;
Object *myObject; = (Object*)pos;
pos += OBJECT_SIZE; 

第二个是直接使用内存堆栈(esp):

Object *myObject;
__asm sub esp, OBJECT_SIZE //make room for a variable
__asm mov dword ptr[myObject], esp

我没有看到任何错误,但是它们之间有什么不同?哪一种方法更好、更快、更安全?

实际上有一个通用的库函数可以为您完成此操作:alloca。它通常就像你的第二段代码,除了大多数编译器实际上可以智能地优化它。

第一种方法的主要缺点是:

  1. 您的内存有限。
  2. 你最终浪费了多少内存你没有使用。

最新更新