Включение полной кучи gflags с dll не работает - PullRequest
2 голосов
/ 17 января 2011

Я пытаюсь включить кучу полной страницы с помощью опции dlls, используя инструмент отладки 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

1 Ответ

3 голосов
/ 18 января 2011

/ dlls влияет на DLL, которая вызывает Win32 API HeapAlloc. Поскольку вы выделяете с помощью new [] DLL, которую вам нужно указать, это на самом деле C Runtime (например, msvcrt90.dll).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...