4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||
1 | |||||||||||
Теория по динамической памяти13.12.2012, 06:06. Показов 2530. Ответов 41
Метки нет (Все метки)
Предположим, применяется оператор new в форме для массива:
0
|
13.12.2012, 06:06 | |
Ответы с готовыми решениями:
41
Освобождение динамической памяти Вопрос по динамической памяти Удаление new из динамической памяти Освобождение динамической памяти |
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
13.12.2012, 18:25 | 21 |
Это, вы не путайте выделение виртуальной памяти процессам и выделение памяти прикладным программам. За первое отвечает ОС, за второе — аллокатор конкретного рантайма, который линкуется к собираемой программе. ОС обычно выделяет память или сразу страницами, или из одной или нескольких куч. А конкретный аллокатор (читай: реализация operator new/malloc) уже сама распиливает выданную виртуальную память на кусочки, ведёт учёт выданных байтиков, возвращает память обратно ОС и так далее.
1
|
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
|
||||||
13.12.2012, 18:27 | 22 | |||||
Но ведь это подходит для статического массива, а для динамического уже нет
taras atavin,
0
|
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
|
||||||
13.12.2012, 18:38 | 24 | |||||
0
|
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
|
|
13.12.2012, 18:39 | 25 |
sizeof(a) / sizeof(a[0]) по моему глупо. Учитывая что массив статический: 1. мы знаем его размер, 2. мы знаем тип данных. И все равно продолжаем заниматься ерундой с макросами sizeof().
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
13.12.2012, 18:51 [ТС] | 27 |
То есть память выделяется в два этапа? Тогда как ведёт себя gcc на винде?
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||||||||||||
13.12.2012, 18:51 | 28 | |||||||||||||||
а размер то мы знаем но не всегда подсчитать можем
например
но потом данные увеличились дописали в программку
и вот здесь
а таблицы могут быть по несколько страниц и что количество элементов на пальцах считать?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
13.12.2012, 18:52 [ТС] | 29 |
Не совсем. sizeof(a) покажет размер указателя, то есть разрядность системы, выраженную в байтах.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
13.12.2012, 18:57 | 30 |
v.a.l.i.d,
я сейчас понял почему не работает для динамики sizeof расчитавает размер на этапе компиляции ( подсмотрел листинг ассемблерный) а на этапе компиляции размер неизвестен( посему дает размер указателя) выход: запоминай размер есть еще один способ выделяем память на 2 элемента(1 элемент) больше и в начале и в конце (или только в конце) записываем маркер значение которое никогда не будет присвоено и потом в цикле ищем этот маркер в частности так ищется длинна строк( ищем 0)
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
13.12.2012, 19:06 [ТС] | 31 |
Вот только терминальный ноль мне объяснять не надо. Речь не о фокусах прилады, а о том, как учёт памяти ведёт сторонний код.
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
13.12.2012, 19:09 | 32 |
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
13.12.2012, 19:14 [ТС] | 33 |
Я перепутал, как делится адрес. В страницу помещается 4096 чаров, перерасход в 128 раз, а чтоб выйти по памяти надо четверть миллиарда массивов по 32.
Добавлено через 2 минуты И как он себя ведёт?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
13.12.2012, 19:18 [ТС] | 35 |
AMD 64, винда x64, а компил 32-х битный.
0
|
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
|
|
13.12.2012, 19:19 | 36 |
ЩИТО? Где это видно чтобы статический массив изменял размер?А если это VLA, то размер мы знаем. Эти заморочки с sizeof()'ами только для удобства поддержки кода. И то, лучше уж дефайнить размер чем мутить sizeof'ы.
1
|
dasha00000
|
|
13.12.2012, 19:20 | 37 |
помогите,модуль по информатике у меня завтра,сама сделать не могу....выполнить сортировку элементов двумерного массива,расположенных на главной диагонали.результат вывести на экран
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
13.12.2012, 19:22 | 38 |
1
|
dasha00000
|
|
13.12.2012, 19:22 | 39 |
taras atavin, выполнить сортировку элементов двумерного массива,расположенных на главной диагонали.результат вывести на экран
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
13.12.2012, 19:33 | 40 | |||||
А никто и не говорит что он изменяет размер во время работы
просто дописывая/ правя программу я могу изменить размер массива и мне придется править весь код если не воспользуюсь
не возбраняется в каждой палатке свои порядки
0
|
13.12.2012, 19:33 | |
13.12.2012, 19:33 | |
Помогаю со студенческими работами здесь
40
Вопросы по динамической памяти. Выделение динамической памяти Освобождение динамической памяти Удаление динамической памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |