CreateThread
에 의해 할당 된 스택 공간이 VirtualAlloc
의 사용을 방해 할 수 있습니까? 나는 스택 공간을 할당 할 수 있습니다 정확히 설명하는 어떤 토론이나 문서를 ... 찾을 수 없습니다CreateThread가 VirtualAlloc 사용을 방해 할 수 있습니까?
다음 더 정확하게 내 질문 보여줍니다 :
uint8_t *baseA = (uint8_t*)VirtualAlloc(NULL,1,MEM_RESERVE,PAGE_NOACCESS);
// Create a thread with the default stack size
HANDLE hThread = CreateThread(NULL,0,SomeThreadProc,NULL,NULL,NULL);
// Possibly create even more threads here.
// Can this ever fail in the absence of other allocators? It doesn't here...
uint8_t *baseB = (uint8_t*)VirtualAlloc(NULL,1,MEM_RESERVE,PAGE_NOACCESS);
// Furthermore, in this test, baseB-baseA == 65536 (unless the debugger did something),
// so nothing appeared between baseA and baseB... not even enough space for the
// full 64kb of wastage, as baseA points to 4096 bytes by itself
이 가하는 경우 사실 일부를 사용 VirtualAlloc
의 아날로그는 Windows가 주어진 프로세스에서 스택 공간을 할당하는 방법을 변경할 수 있습니까?
'이것은 생각할 수 없다'- OS가 부팅시 너무 빨리 충돌하여 BSOD에 시간이 없을 수도 있습니다. –
답변 해 주셔서 감사합니다. 아마도 "간섭"은이 질문에 대한 가혹한 한마디였습니다. 내가 묻는 것은 기본적으로'CreateThread'가 스택 공간을 어디서나 할당 할 수 있다면 - 당신이 대답했다는 것입니다. "간섭"에 의해 프로세스의 가상 주소 공간을 조각 낼 수 있는지 묻는 중이었습니다 (그러나 지금 생각하면 다른 곳으로 할당 할 수 있습니까?). 따라서 임의의 스레드 할당이 사용자 지정 할당자가 해결할 수없는 조각화를 일으키는 것처럼 보입니다. – defube
나는 내가 소개 한 개념 "AddrSpaceUtilization"을 좋아한다. 이것은 주소 공간 자체의 크기에 대한 모든'VirtualAlloc' 할당의 크기 합계의 비율입니다. Windows에서의 32 비트 프로세스에 대한 필자의 경험에 따르면,이 값이 85-90 % 미만이면 모든 것이 잘 작동합니다. 90 %를 초과하면 여러 문제가 발생하기 시작합니다. –