Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Откуда берутся лишние байты при выделении памяти? Тест под VS.NET 2003 
:(
    Опции темы
Royan
Дата 7.1.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Имеем такой код.

Код

int main()
{
    char **weightMatrix;
    int weightMatrixWidth = 5;
    int weightMatrixHeight = 5242880;//5MBs == 5120 KB
    weightMatrix = new char*[weightMatrixWidth];

    for(int i = 0; i < weightMatrixWidth; i++) {
        weightMatrix[i] = new char[weightMatrixHeight];//+5280Kb +(8Kb?)
    }
    //[...]
}


Вот лог расходуемой памяти для char'ов после каждой итерации согласно тому, что видно в

диспетчере задач (собственно я пользуюсь Process Explorer, но это не важно).


160KB + 5120KB + 8KB
5288KB + 5120KB + 8KB
10416KB + 5120KB + 8KB
15544KB + 5120KB + 8KB
20676KB + 5120KB + 8KB
25804KB + 5120KB + 8KB


160KB - это выделенная память на момент входа в цикл for.

Аналогичные значения этих лишних байт для других типов данных.

int - 24KB
double - 44KB

Отсюда и вопрос что это за "лишние" байты и откуда они берутся?

Это сообщение отредактировал(а) Royan - 7.1.2006, 19:41


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Fin
Дата 7.1.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



В каком режиме ты компилил программу? Если в дебаг. То идет добавление к концу выделенной памяти зоны безопасности. + инфа в менеджере памяти. На VC++ 6.4 Зона безопасности заполняется значением 0xCC


--------------------
Пролетал мимо.
PM MAIL   Вверх
Royan
Дата 8.1.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Цитата

В каком режиме ты компилил программу?

Действительно я забыл упомянуть. Этот эффект наблюдается во всех режимах и debug и release. Можешь проверить сам. При этом я подчеркиваю речь идет не о байтах, а о килобайтах.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Earnest
Дата 9.1.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Хм, действительно интересно.
Если не в лом, проверь состояние heap'а с помощью функций _heapwalk и Co.
А потом нам расскажешь, куда память девается...


--------------------
...
PM   Вверх
threef
Дата 10.1.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 1
Всего: 10



ИМХО память девается на выравнивание, соотв.размеру страницы(4кб ),соотв.размеру региона(64кб).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1984 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.