2013-05-27 2 views
-4

Я использую VC++ 10 для проекта C++, над которым я работаю, и по какой-то причине всякий раз, когда я выделяю объект, система выделяет 4kb памяти для него (даже если объект несколько байтов).Проект VC++ 10 выделяет слишком много памяти для объектов

Подводя итог:

  • Использование новых/таНос выделить небольшие объекты приводит к выделению 4kb для каждого объекта.
  • Я проверил настройки проекта с новым проектом, и нет никаких различий.
  • Проект использует внешнюю C-dll и включает заголовочный файл, содержащий декларации для экспортируемых функций и структур этой DLL.
  • Тестовая система Win7 x64, но приложение скомпилировано для x86

Проект довольно велик, но я не нашел каких-либо указаний, рассказывающие систему выделить, что много памяти, и я могу проверить, что параметр переданный в new/malloc - правильный размер объекта.

Обратите внимание, что это происходит для всех объектов/структур внутри моего проекта.

Заранее спасибо.

+0

вы строите в режиме отладки? –

+2

Как вы заметили это значение 4kb? Я сильно подозреваю, что это просто нормальное поведение подкачки памяти. – Nbr44

+2

Можете ли вы опубликовать исходный код для выделения памяти? –

ответ

1

Предполагая, что вы находитесь на x86, память может быть предоставлена ​​только для реализации распределителя памяти в размерах страниц или больше, а размер страницы по умолчанию - 4 килобайта.

Вы увидите разницу в 4Kb в рабочем наборе для первого объекта, но вы не увидите ничего для последующих распределений до тех пор, пока эта страница не будет использована.

(Это предполагает, что вы строите в режиме выпуска. В режиме отладки, ЭЛТ может использовать больше памяти для каждого объекта для канареек/проверки границ)

+0

На самом деле это то, чего я ожидал, но он выделяет 4kb для каждого объекта. – user1400757

+2

Хорошо, тогда [status-norepro]. –

+0

ОК, похоже, что верификатор приложения загружен исполняемым файлом. это вызывает проблемы – user1400757

Смежные вопросы