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

时间:2013-04-30 02:40:15

标签: performance visual-c++ memory-management assembly

我将在不使用任何 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

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

1 个答案:

答案 0 :(得分:1)

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

第一个主要缺点是:

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