VirtualAlloc
: 0x1E0000 (Size: 0x39000, Reserve)
및 0x219000 (Size: 0x3000, Commit)
으로 할당하고있는 두 개의 메모리 영역이 있습니다. 이들은 모두 동일한 할당 경계 (이 경우는 0x40000 (64K*4)
으로 반올림 됨) 내에 있고 두 번째 영역은 첫 번째 끝 부분에서 시작됩니다.단일 통화로 예약하지 않고 같은 할당으로 두 개의 연속 메모리 영역을 예약 할 수없는 이유는 무엇입니까?
이제 분 동안의 커밋 부분을 잊어 버리십시오. MEM_RESERVE
첫 번째 0x39000
다음에 MEM_RESERVE
다음 0x3000
이면 ERROR_INVALID_ADDRESS
이됩니다. 그러나 만약 내가 MEM_RESERVE
둘 다 가서, 0x39000+0x3000=0x3C000
, 그럼, 작동하고, MEM_COMMIT
두 번째 영역을 성공적으로 커밋하는 데 사용할 수 있습니다.
왜 그럴까요? 왜 내가 하나의 큰 예약 구역이 아닌 각 구역을 독자적으로 예약 할 수 없습니까? 첫 번째 영역을 예약 한 후 나머지 영역은 할당 (0x219000-0x21FFFF)
이 MEM_FREE
상태이므로 나머지 0x7000
중 첫 번째 0x3000
을 할당 경계에 어떻게 예약 할 수 없습니까?
댓글 올린 코드를 게시하십시오. 나는 당신이하려고하는 것을 따라하기가 어렵습니다. –