0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
|
||||||
1 | ||||||
В чем преимущества new и delete и могут ли они действительно заменить функции calloc, malloc, free, realloc?25.08.2016, 14:27. Показов 5210. Ответов 32
Язык программирования C поддерживает функции динамического управления пямятью: calloc, malloc, free, realloc - которые неподдерживают некоторые компиляторы C++. Вместо этих функций у них есть объектные операторы new и delete. В связи с этим у меня несколько вопросов. 1. Я написал образец программы, использующей статические и динамические переменные и массивы, но вывод первого массива iarray0 почему-то не работает. 2. Я не совсем понял разницу между статическими и динамическим переменными и массивами. 3. В чем преимущества операторов new и delete и могут ли они действительно заменить функции calloc, malloc, free, realloc?
0
|
|
25.08.2016, 14:27 | |
Ответы с готовыми решениями:
32
Использование calloc/realloc/free Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc? Работа с памятью через malloc,realloc и free
|
2151 / 1661 / 701
Регистрация: 27.07.2012
Сообщений: 4,942
|
||||||
25.08.2016, 14:37 | 2 | |||||
Добавлено через 3 минуты Разница в области памяти, в которой эти переменные и массивы создаются. Это во-первых. А во-вторых, статические переменные объявляются с ключевым словом static. В примере таких нет. Добавлено через 3 минуты Откуда взялось это слово "объектные"?
0
|
25.08.2016, 14:41 | 3 |
Какие это?
![]() Это есть не у компиляторов, это есть в языке. Причем то, что Вы описываете - это new-expression, а не operator new. Конструкторы, деструкторы? Не, не слышал... Возьмите книжку для начинающих, почитайте.
0
|
Неэпический
|
|
26.08.2016, 15:42 | 4 |
0
|
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
|
||||||
27.08.2016, 07:25 [ТС] | 5 | |||||
Я исправил код. Строка «std::cin >> num0;» была не там, где ей надо быть.
А можно поподробнее про разницу в области памяти. Слово «статические» я использовал чтобы отделить переменные объявленные обычным способом от переменных созданных с помощью оператора new. Слово «объектные» я использовал по той же причине. Добавлено через 7 минут AIDE например. Он на malloc ошибки.
0
|
2151 / 1661 / 701
Регистрация: 27.07.2012
Сообщений: 4,942
|
|
27.08.2016, 15:33 | 6 |
Память под "обычные" переменные выделяется в стеке и освобождается, когда переменная выходит из области видимости. Под динамические созданные переменные память выделяется в т.н. "куче" - специальной области памяти (реализация зависит от среды, где выполняется программа). Освобождается память явно, когда программист вызывает delete.
0
|
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
|
|
27.08.2016, 16:05 | 7 |
Почему в стеке выделяется память под "обычные" переменные? Стек предназначен для хранения адреса того места, откуда вызвалась подпрограмма. Изучайте ассемблер, товарищ. Под "обычные" переменные выделяется память в обычной памяти, точно также как и для динамических переменных.
По теме могу сказать, что статические переменные или функции, объявленные со словом static, создаются без создания экземпляра класса. Эта тема относится к классам и объектам.
0
|
Комп_Оратор)
![]() |
|
27.08.2016, 17:10 | 9 |
Да все они обычные. То есть, необычные они все. На стеке создаются
![]() Да! Плюсы в широкие массы! _Ivana, я тоже ещё тот плюсовик. Но неумех не вижу.
0
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
|
27.08.2016, 17:49 | 10 |
чертовы фортранщики и сюда добрались.
когда VLA в плюсы просочился? Добавлено через 6 минут слава страуструпу, хоть с флагом pedantic кидает варнинг.
1
|
27.08.2016, 21:51 | 12 |
Вот если вы начнете писать откровенные глупости менторским тоном (хотя мне тяжело вас представить в такой роли
![]() ![]()
1
|
Комп_Оратор)
![]() |
|
27.08.2016, 22:08 | 13 |
Не смогу. Нельзя начать что-либо дважды.
![]() Я понял, _Ivana, это был сарказм. О менторском тоне. Я свободно могу написать что-то вроде: ![]() ![]()
0
|
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
|
|
28.08.2016, 12:48 | 14 |
Почему в стеке выделяется память под "обычные" переменные? Под
- они все автоматические.
0
|
Комп_Оратор)
![]() |
|
28.08.2016, 13:05 | 15 |
Кто же спорит. Книг полно, но если человеку не пошло и он "на пальцах" спрашивает? Ему так и объясняют. А автоматическими ещё называют переменными "на стеке", имея ввиду стековый автомат захвата-освобождения. То есть всё происходит без явного участия программиста. Поэтому, если нет уточнения в виде "статический/динамический", то говорят о автоматической. Регистровые упоминают нечасто и не на ночь. Статические имеют два контекста, класс хранения и область видимости в программе (многофайловой). То есть, если говорить строго и подробно, то ничего объяснить не удастся.
0
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
|
28.08.2016, 14:01 | 16 |
ну классно, можно сказать, что все переменные хранятся в ram и не заморачиваться, да?
0
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
|
28.08.2016, 14:23 | 18 |
я не утрирую, я за ним повторяю. ram = обычная память? обычней некуда. мы же можем взять указатель от автоматической переменной? можем взять от динамически выделенной? можем, это просто адреса, плоская модель. память одна и та же. это он пытается сказать? зачем нам эти стеки/кучи/бсс/область данных - все это рам.
Добавлено через 3 минуты а вообще первое, что в этом топике должно было быть сказано - стандарт c++ не поддерживает vla.
0
|
Комп_Оратор)
![]() |
|
28.08.2016, 14:29 | 19 |
Компилятор ты могуч,
Кучи стеков, стеки куч... У TC противопоставляются статические и динамические переменные, в то время как вместо статических он хотел сказать о автоматических. С этого и пошло. Есть 2 пути. Объяснять на коленке или щелкнуть в нос и послать учиться. Мне интересно, почему скомпилировалось у него. Есть компиляторы которым море по колено?
0
|
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
|
28.08.2016, 14:32 | 20 |
gcc и clang компилят, им то что, си чистый то может. через alloca реализация наверное.
без флага педантик даже варнинги не показывают, наглецы.
1
|
28.08.2016, 14:32 | |
Помогаю со студенческими работами здесь
20
Почему так себя ведёт программа? Функции: malloc(), realloc(), free()
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |