디버깅 gflags 도구를 사용하여 dlls 옵션으로 전체 페이지 힙을 사용하려고합니다. 이렇게하면 응용 프로그램과 함께 전체 페이지 힙을 사용할 수 있지만 지정된 dll 만 사용할 수 있습니다.gflags dll로 활성화하는 전체 힙이 작동하지 않습니다.
dlls 옵션을 사용하지 않으면 제대로 작동합니다. 내가 할당 된 메모리 블록을 통해 쓰기 시도에 예외를 얻을 수 있어요. 하지만 dll 옵션을 사용하여 동일한 기능을 사용하려고하면 문서에 따라 dll 코드를 사용해야 할 때 주 응용 프로그램 코드 또는 dll 코드에 의해 할당 된 메모리 블록에 대한 예외가 발생하지 않습니다.
Windows XP와 Windows 7에서 모두 동일한 시도를했으며 동일한 문제가 있습니다. 나는 dll 이름을 잘못 입력하고 dll에서 전체 페이지 힙을 사용할 수없는 경우를 대비하여 여러 번 검사했습니다.
gflags -p /enable test_dll1_app.exe /dlls test_dll1.dll
gflags -p /enable test_dll1_app.exe /dlls test_dll1.dll /full
이 내가 테스트를 위해 사용하고있는 코드는 다음과 같습니다 :
(가) 아무 소용이 두 명령을 시도
DLL 코드 :
#define TEST_DLL1_API __declspec(dllexport)
extern "C" TEST_DLL1_API int * fntest_dll1(void)
{
int * value0 = new int [413];
int * value = value0;
for (int i=0; i < 440; i++)
*value0++ = i;
return value;
}
기본 응용 프로그램 코드 :
typedef int * (*AddFunc)();
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE LoadDll;
LoadDll = LoadLibrary(_T("test_dll1.dll"));
if (LoadDll)
{
AddFunc pfnctFunc;
pfnctFunc = (AddFunc)GetProcAddress(LoadDll, "fntest_dll1");
if (pfnctFunc)
{
int * value = pfnctFunc();
for (int i=0; i < 440; i++)
*value++ = i;
}
}
int * value = new int [413];
for (int i=0; i < 440; i++)
*value++ = i;
return 0;
}
누군가가 내 실수를 정확하게 도움이 될 수 있는가. GB
나는 이것이 dll 기반으로 어떻게 작동하는지 실제로보고 싶지 않다. 특정 모듈이 힙 API를 호출했는지 확인하는 유일한 방법은 지나치게 비싼 것으로 보이는 모든 호출에서 스택 백 추적을 수행하는 것입니다. –