1
주요 동기 : 스택 오염을 피하기 위해 movntdqa 어셈블러 명령을 사용합니다. 이 명령은 쓰기 조합 메모리 (WS 및 USWC라고도 함)와 함께 작동합니다.Windows에서 "쓰기 결합"메모리 블록을 할당하는 방법은 무엇입니까?
주요 동기 : 스택 오염을 피하기 위해 movntdqa 어셈블러 명령을 사용합니다. 이 명령은 쓰기 조합 메모리 (WS 및 USWC라고도 함)와 함께 작동합니다.Windows에서 "쓰기 결합"메모리 블록을 할당하는 방법은 무엇입니까?
PAGE_WRITECOMBINE을 VirtualAllocEx()에 전달하십시오. 해당 페이지에 대한 순차적 쓰기는 MMU에 의해 쓰기 결합됩니다. 읽기 또는 비 순차 쓰기는 심각한 성능 저하를 초래합니다.
나는 시도 : char * ans = (char *) VirtualAllocEx (hProcess, 0,1024 * 1024 * 64, MEM_COMMIT, PAGE_READWRITE | PAGE_WRITECOMBINE); GetLastError = 87 으로 PAGE_WRITECOMBINE을 PAGE_NOCACHE로 바꿀 때 항상 0을 반환합니다. 제대로 작동하고 메모리 액세스가 매우 느립니다. 하지만 나는 movntdqa가 광고 된대로 작동하도록 결합하여 작성해야합니다. – yigal
흠. VirtualProtectEx()로 페이지 작성 후 사용 권한을 변경하십시오. – Crashworks
도 작동하지 않습니다. 아래 코드는 여전히 87 unsigned long old를 반환합니다. err = VirtualProtectEx (hProcess, ans, size, PAGE_READWRITE | PAGE_WRITECOMBINE, &old); – yigal