【问题标题】:dynamic allocation : buffer vs memory stack动态分配:缓冲区与内存堆栈
【发布时间】:2013-04-30 02:40:15
【问题描述】:

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

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

【问题讨论】:

  • 任何你不能以标准 C++ 方式来做的理由,例如对象我的对象; ?

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


【解决方案1】:

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

第一个的主要缺点是:

  1. 您只有有限的内存量。
  2. 不管你没有使用多少内存,你最终都会浪费掉。

【讨论】:

  • alloca 是(相对)常见的,但不是标准的。
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2019-05-17
  • 2011-05-28
  • 2011-12-01
  • 2010-12-11
  • 2014-09-07
  • 2011-12-24
相关资源
最近更新 更多