IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Странности при работе с динамической памятью, С/С++
Lapp
сообщение 5.08.2011 6:19
Сообщение #1


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Несколько странной показалась мне работа с памятью..

Программа до смешного простая: в цикле аллоцирует память по элементам массива длины m. Каждый элемент - упакованный в структуру массив длины L. Цель программы - продемонстрировать ученику работу с динамической памятью.. В качестве самого первого приближения использую конструкцию с malloc(). Код, как результат импровизации, вышел неким гибридом C и C++ (так сказать, C+-)) Для наглядности я открыл TaskManager на закладке Performance. При m=2000 и L=106 я ожидал, что используемая память вырастет на 2 ГБ. Вставил задержку в цикл аллокации памяти, чтоб был наклон графика памяти. Думаю - сейчас мой ученик все увидит своими глазами. Запускаю прогу..

Ага, разбежался! lol.gif Кривая графика памяти даже не шелохнулась..

Ход мысли такой: БЛИН!!!!!!!!!!!!!!!!! ГДЕ-ТО ОШИИИИИИБКА!! КЭШМЭРР!!

Если ошибка, то при использовании взятой памяти будет сбой. Я добавляю в цикл присвоение константы случайному элементу внутреннего массива. Никаких сбоев - все пашет на ура..

Дальнейший ход мысли: НАДО ДЕБАГГИТЬ..

При отладке замечаю, что вся аллоцированная память инициализирована нулями.. blink.gif Что ж, если так, то она может быть и упакована. Вставляю в цикл инициализацию всего массива, и..

О, СЧАСТЬЕ!! наконец-то моя программа начинает ЖРАТЬ ПАМЯТЬ! Сжирает ровно столько, сколько положено (а чудес я и не ждал)). Если же я делаю заполнение половины массива, то получаю половинный расход памяти.
Прикрепленное изображение

Первый пик - инициализавция всего массива (почти, то есть через один элемент), второй - только первой половины, третий - только второй половины.

Вопрос, я полагаю, вы уже поняли. Кто занимается этим грязным бизнесом - компилятор или система? И вообще - какого, извините, черта?

Компилятор - gcc (MinGW + C::B). Debug и Release ведут себя одинаково (в среде и без).
OS - Windows 7 Pro 64


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 20.07.2025 5:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"