스택에 할당 된 항목은 삭제하지 마십시오. 현재 스코프를 벗어날 때 스택 포인터가 이전 스택 프레임 으로 다시 이동하므로 현재 범위의 객체에 사용 된 모든 메모리가 효과적으로 재구용되므로 자동으로 회수됩니다.
기본적으로 모든 스택은 응용 프로그램이 메모리에로드 될 때 할당되므로 고정 된 크기의 구조가 반복적으로 재사용됩니다 (코드 흐름이 범위 안팎으로 이동하는 동안). OS는 영리한 트릭을 수행 할 수 있지만 (스택의 상단 부분을 위탁하는 가드 페이지를 사용하여 응용 프로그램의 시작 부분에 예약되어 있음) 일반적으로 이것은 당신을 염려하지 않아야합니다.
스택 크기는 PE 헤더 (실행 파일의 헤더)의 일부이며 링커 옵션으로 설정할 수 있습니다. 메모리에로드 된 PE 구조를 스누핑하여로드 된 실행 파일에 대한 값을 검색 할 수 있습니다 (기본적으로 HMODULE
은 실행 파일이 메모리에 매핑되는 위치입니다). 나는 ImageHelper 라이브러리가이 작업에서 유용 할 수 있다고 생각한다.
당연히
- , 소멸자가 실행 된 후, 그건 그렇고, FPO는 여기에 약간의 변화를 줄 수 있지만 개념은 동일합니다. 내가 수동으로 1메가바이트까지 메모리에 액세스하는 경우
편집 otherwords에서
, 창 액세스 위반을 던질 수있다?
이미 커밋 된 경우 (즉, 스택에 1MB의 개체를 할당하고 할당을 해제 한 경우) 발생할 수 있다고 생각하지 않습니다.
윈도우 스택의 일부가 더 이상 사용하지 않는 것을 단서가없는 것입니다. Windows는 더 많은 페이지를 커밋해야하는지 여부를 감지 할 수 있습니다. 가드 페이지를 사용하여 스택의 상단 부분에 대한 액세스를 감지하지만 이러한 페이지가 더 이상 사용되지 않는다는 것을 알 수 없습니다.
실제로 컨텍스트 스위치에서 스택 포인터를 찾을 수는 있지만 스택이있는 "영리한"기능을하는 앱이 중단 될 수 있습니다. 일반적으로 노력이 필요하지 않은 최적화가됩니다. 이러한 페이지는 여전히 페이지 아웃 될 수 있습니다.
여전히 안전하게 재생하려면할당이 발생했는지 여부를 모르는 경우 현재 사용중인 섹션을 위로 읽어야합니다. 따라서 페이지가 위쪽으로 커밋되지 않은 상태에서 가드 페이지를 계속 터치하면 Windows에 더 많은 작업을 알리도록 경고합니다 스택 페이지
잘 * 스택 오버플로가 발생할 수 있으므로 stackoverflow.com에 왔습니다. :) –
또는 BufferOverflow.com을 시도했을 수 있습니다. ;) 흠 ... 아마도 StackOverflow가 해당 도메인을 예약해야합니까? –