DLL에서 static CRT를 사용하면 각각의 DLL은 다른 heap을 사용하는가?

‘DLL프로젝트에서 static CRT를 사용할 경우 각각의 static CRT는 각각의 heap을 사용한다.따라서 static CRT를 사용하는 DLL을 2개 사용할 경우 프로세스에는exe(1) + dll(1) + dll(1) = 3 해서 최소한 3개의 heap이 존재한다.’ 라고 기억하고 있다. 근데 최근에 발표자료 만들면서 테스트 해보니 DLL을 여러 개 로드해도 heap 개수가 증가되지 않는 것으로 확인되었다. Windows 10이전에는 CRT가 msvcrtxxx.dll에 구현되어 있었고 … More DLL에서 static CRT를 사용하면 각각의 DLL은 다른 heap을 사용하는가?

windbg에서 실행할 때 HeapAlloc()이 다르게 동작하는 이유

디버거에서 exe를 launch한 경우 LFH를 사용하지 않는다는 글을 어디선가 본것 같다.일단 Visual Studio Debugger에 대해서는 해당되지 않는 얘기다.Windows 10/11 모두 exe를 직접 실행하거나 Visual Studio에서 launch한 경우 LFH를 사용하는 것을 확인했다. 이 와중에 조금 이상한 점을 발견했는데 windbg에서 launch하는 경우 동일 사이즈 메모리 할당에 대해서 HeapAlloc()에서 돌려주는 메모리의 실제 사이즈(heap entry의 사이즈)가 다르다는 것이다.debug/release 또는 … More windbg에서 실행할 때 HeapAlloc()이 다르게 동작하는 이유

2013년의 어느날 디버깅 메모(windbg)

2013년 12월 27일 , Project D Online 출시 준비할때였다. 첫번째 보스(벽에서 미사일 쏘는 보스-혼두라 모티브)랑 싸우고 나오면 나와서 맵체인지 할때 게임이 멈추는 증상이 있었다. 멈춘다고 하는것은 플레이어 입장이고 정확하게 얘기하자면 데드락 아니면 무한루프인데 이 경우는 데드락이었다. 데드락은 데드락인데 그게 어플리케이션이 사실상 크래시한거고 크래시에 의한 데드락이었다. 버그 재현도 잘 되지 않아서 엄청나게 절망했었다. 최초 같은 사무실에 … More 2013년의 어느날 디버깅 메모(windbg)