2013-04-30 4 views
1

new 연산자를 사용하지 않고 새 개체를 할당하려고합니다. 직접 메모리 스택 (ESP)를 사용한다동적 할당 : 버퍼 대 메모리 스택

char buffer[BUFFER_SIZE]; 
char *pos = buffer; 

Object *myObject; = (Object*)pos; 
pos += OBJECT_SIZE; 

초 하나

은 추가적인 버퍼를 사용하는 하나의 제 (이것은 필요 유지되어야 트랙) 및 I는 두 가지 방법을 발견

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

나는 어떤 오류도 보이지 않지만 어떤 차이점이 있습니까? 그리고 어떤 방법이 더 빠르고, 더 안전합니까?

+5

표준 C++ 방식으로 할 수없는 이유는 무엇입니까? 개체 myObject; ? –

답변

1

실제로이 작업을 수행하는 공통 라이브러리 기능이 있습니다 (alloca). 일반적으로 두 번째 코드 조각처럼 작동하지만, 대부분의 컴파일러는 실제로이를 최적화하는 데 지능적입니다.

  1. 당신은 한정된 양의 메모리를 가지고 :

    첫 번째의 주요 단점

    는 점이다.
  2. 결국 사용하지 않는 메모리를 낭비하게됩니다.
+2

'alloca'는 (상대적으로) 공통이지만 표준이 아닙니다. –

+0

@CarlNorum : 네 말이 맞아. 결정된. – icktoofay