powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
25 сообщений из 85, страница 3 из 4
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885158
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryстранно что отскочил назад, а у тебя вперёд
Некоторые компиляторы размещают переменные в памяти в порядке обратном их объявлению. Некоторые вообще произвольно. Так что вы на порядок не рассчитывайте.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885184
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня уже гонят..
Спасибо, сегодня я узнал много нового, а самое главное интересного C:
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885287
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryОтличный пример. Спасибо :)
1. Стек ограничен ?(думаю да)
2. Происходит ли проверка во время раздачи адресов объектам ? Просим мы адрес на буфер из 1000 целых, хранитель стека мне даст любой адрес, или проверит, есть ли в стеке столько памяти ? Вероятно проверит
3. Раздача этих адресов происходит во время выполнения, или во время компиляции ? Видимо во время компиляции. Тогда всё понятно.

Верно ?
1. Размер стэка задается в параметрах вызова компилятора.
2,3. Я компиляторов не писал, только в общих чертах представляю как они устроены, поэтому далее могу ошибаться. Выше рассматривали использование стэка внутри функций, но есть еще один нерассмотренный момент - вызов функций. Происходит примерно следующее: во время компиляции определяется сколько места в стэке надо для работы функции, а при ее вызове ей это место дается (память не выделяется, просто дается следующий свободный кусок требуемого размера). В какой-то момент стэк закончится и будет обращение по адресу за пределами стэка. Например при рекурсии невозможно определить во время компиляции сколько раз функция вызовет сама себя.
Но при компиляции функции адреса хранения переменных постоянные, просто они задаются относительно начала того самого блока памяти выделенного в стэке перед вызовом функции. По сути адрес состоит из двух частей: адреса начала блока и смещения.
Хочешь более глубокого изучения этой темы - это надо ассемблер изучать.

Пример как в рекурсии выйти за пределы стэка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void f(int x)
{
	x++;
	printf("%p %d\n", &x, x);
	f(x);
}

void main()
{
	f(0);
}

...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885368
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,
Ты бы всё же книжки читал, а не по форумам шастал. Форум хорошо, когда что-то не понял и застрял.
А изучать что-то по форумам невозможно.

SashaMercuryУ меня остался один вопрос. Как можно создать и удалить объект за t=0 ? Насчёт удалить понимаю, такой операции видимо даже не будет, просто компилятор не вспомнит что по этому адресу что-то расположено. Но как он может выделить память за нулевое время, не понимаю.

Ну, изучи как стек работает.

На самом деле там действительно ноль.

Есть sp (вершина стека), она при входе в функцию увеличивается (или уменьшается) на размер всех переменных в функции,
и далее у каждой переменной адрес -- это вершина стека + смещение к переменной ( определяется в процессе компиляции ).

А дальше весь код работы с переменной просто работает со своим куском памяти так, как надо.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885484
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

не упрощай :)
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885538
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
нет у меня времени изучать больше книг в этом году. Мне нравится Си и кажется интересным С++, это я изучаю. Возникают смежные вопросы. Нет времени не потому что лень, а потому что именно в этом году у меня 6-8 часов в день математика.

Сейчас изучаю Кнута, и BS. Заканчиваю изучать Анализ программного кода. Когда закончу одну из трёх, начну Таненбаума. Правда нет времени, не ругайтесь.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885718
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСейчас изучаю Кнута, и BS. Заканчиваю изучать Анализ программного кода. Когда закончу одну из трёх, начну Таненбаума. Правда нет времени, не ругайтесь.

Вот Кнута брось. Можешь вообще выкинуть книгу.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885720
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВот Кнута брось. Можешь вообще выкинуть книгу.
Он же математик. Ему Кнут - самое то.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38885805
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНет времени не потому что лень, а потому что именно в этом году у меня 6-8 часов в день математика.

Сейчас изучаю Кнута, и BS.
В какой конторе у бакалавров 6-8 часов ежедневно математика? Просто любопытно. Обычно у баков всего не более трёх пар в день.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38886708
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivSSСейчас изучаю Кнута, и BS. Заканчиваю изучать Анализ программного кода. Когда закончу одну из трёх, начну Таненбаума. Правда нет времени, не ругайтесь.

Вот Кнута брось. Можешь вообще выкинуть книгу.

Я уверен, вы просто описались
PS Это ведь не Донцова или Фленов
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38887119
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryMasterZivпропущено...


Вот Кнута брось. Можешь вообще выкинуть книгу.

Я уверен, вы просто описались
PS Это ведь не Донцова или Фленов
Возможно я озвучу некое среднее мнение среди модераторов. Обсуждение Кнута
без линии С/С++ мы будем считать оффтопом в этом форуме.

Безусловно старина Дональд умный и интересный автор. Но линия обсуждения
должна быть актуальной и интересной для сообщества. Разводить блоги или
дискурсы на математиков 9000 левела мы считаем предметом сторонним и не имеющем
отношения к клиент-серверным технологиям.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38887648
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyMasterZivВот Кнута брось. Можешь вообще выкинуть книгу.
Он же математик. Ему Кнут - самое то.

Да если он ещё Кнута читать будет, то это -- всё, до пенсии.
Кнут -- удивительная зануда, удивительный крючкотвор и буквоед.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38887652
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryMasterZivпропущено...


Вот Кнута брось. Можешь вообще выкинуть книгу.

Я уверен, вы просто описались
PS Это ведь не Донцова или Фленов


Нет, я не описался. Я тебе категорически не рекомендую читать Кнута без нужды (в смысле -- если там какой-то алгоритм нужный описан, и его нигде больше нет). И никому не рекомендую. Полно на эту же тему (алгоритмы) других толковых, но более лёгких книжек.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38887659
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДа если он ещё Кнута читать будет, то это -- всё, до пенсии.
Я так понял что программистом он не собирается быть.
А чисто для общего развития можно читать что угодно ))
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #38888926
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКартежниккак узнать когда клиент отключился?
может все-таки послушать советы
Dimitry SibiryakovДумать вредно. Читай доку.

и начать читать как ошибки обрабатывать?
https://www.google.ru/search?q=recv()
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v=vs.85).aspx
http://www.opennet.ru/man.shtml?topic=recv&category=2&russian=0

Я прошу прошения , не знаю кто писал эту доку
но ИМХО лучше сразу делать правильно
через SO_ERROR, errno, strerror(errno)
Например :
Код: plaintext
1.
2.
3.
4.
  if (getsockopt(soc, SOL_SOCKET, SO_ERROR, (void*)(&valopt), &lon) < 0) { 
                 fprintf(stderr, "Socket errror %d -[%s]\n", errno, strerror(errno)); 
                 exit(0); 
              } 
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291386
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyКартежник,

1) На каждой итерации цикла вы имеете дело с новым массивом содержащим мусор (содержит ли этот мусор куски предыдущих массивов совершенно не важно - это просто мусор)
2) Утечек никаких нет.
А если бы у него было так:
Код: plaintext
1.
2.
3.
4.
5.
smth_class* name;
for(int i=0;i<n;i++){
  name = new smth_class(i);
}
delete name;


При этом реализация класса нам неизвестна. Насколько вообще законна такая конструкция и будет ли утечка памяти?
PS Я полагаю что это плохой участок кода, но хотел бы уточнить. Здесь вероятно правильней проводить реинициализацию без использования new, один раз перед for выполнить создание объекта и его его инициализацию, на итерациях обновлять значения объекта
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291399
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один преподаватель рассказывал такую историю: когда он был студентом, другой студент задавал на лекция всякие глупые вопросы. Первого это раздражало. А потом он понял, что эти глупые вопросы были, на самом деле, важны.
В формате лекции (полтора часа пары) это действительно и важно и нужно - время ограничено.
В формате форума - вредно и раздражает: предполагается, что человек не придумал какую-то фигню только что, а всё же потратил своё время на самостоятельные разборки.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291401
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вангую Сашка скоро возненавидит С++. Ему-бы MathLab или Wolfram для душевной услады...
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291408
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Чтобы ломать кирпичи - нужно тренироваться, тренироваться и что? Правильно - ещё раз тренироваться" (ц) неизвестный сержант ВДВ
new выделяет память и вызывает конструктор для создания объекта в выделенной памяти.
delete вызывает деструктор для разрушения объекта и освобождает занятую объекту память.
Таким образом, new и delete вызываются строго попарно и в одинаковой форме.
Вроде, об этом рассказывается во первых строках главы про new любой книжки по C++
Зуб не дам, но и в стандарте такие вещи должны быть упомянуты. Хотя, вероятно, в стандарте всё будет "размазано" по куче взаимосвязанных мест.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291418
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может у него С++ с GC
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А были-ли проекты С++ компиллятора с таким аллокатором?
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291423
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Умные указатели?
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291426
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не то. Это требует переписывания кода. А имею в виду вот так чтоб ты флудил через new
а при выходе из scope блока или функции - утечки удалялись.
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291429
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonимею в виду вот так чтоб ты флудил через new а при выходе из scope блока или функции -
утечки удалялись.

Будет забавно, когда память, выделенная в malloc, освободится при выходе из него.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
    #39291434
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже если опустить "мелкую проблемку" отсутствия эффективного алгоритма поиска "мёртвых" объектов, остаётся суровая проблема порядка вызова деструкторов.
try/finally тоже руками пишут. И переписывают, если выяснится, что накосячили.
Т.е. не существует общего рабочего решения, не говоря уж об эффективном - какая уж тут сборка мусора.
...
Рейтинг: 0 / 0
25 сообщений из 85, страница 3 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]