Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
Объекты объявленные в теле цикла являются автоматическими, это так. И потому они действительно должны автоматически уничтожиться, не вызывая утечек. Но как это должно наверняка происходить в цикле ? 1. Либо, как говорит Анатолий (возможно это соответствует стандарту), на каждой итерации цикла будет создаваться новый объект, путь даже по тому-же адресу 2. Либо объект будет создан один раз, и уничтожится после завершения всех итераций цикла (о чём говорил Дмитрий, и что логичнее). Верно ли, что поведение 2 будет гарантировать квалификатор static ? Кстати, в Си и в С++ static несет аналогичное значение ? Мне так не показалось, но видимо что-то не так понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 03:34 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
И только ли от стандарта зависит поведение в данном случае ? Т.е. на всех ли компиляторах поведение будет аналогичным ? На всех ли компиляторах поведение должно быть аналогичным ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 03:38 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо как это должно наверняка происходить в цикле ? 1. Либо, как говорит Анатолий (возможно это соответствует стандарту), на каждой итерации цикла будет создаваться новый объект, путь даже по тому-же адресу 2. Либо объект будет создан один раз, и уничтожится после завершения всех итераций цикла (о чём говорил Дмитрий, и что логичнее). Компилятор имеет право повторно использовать один физический объект в данном случае, т.к. никаких побочных эффектов создание и удаление не инициализированного массива на стеке не имеет (поведение программы не меняется от этого). SashaMercuryВерно ли, что поведение 2 будет гарантировать квалификатор static ? Кстати, в Си и в С++ static несет аналогичное значение ? Мне так не показалось, но видимо что-то не так понял Нет, static это вообще другое, это глобальный объект с локальной областью видимости. В С++ то же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 04:06 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
Встретил такой пример, у BS A local variable is initialized when the thread of execution reaches its definition. By default, this happens in every call of the function and each invocation of the function has its own copy of the variable. If a local variable is declared ss t taa t tii c c, a single, statically allocated object will be used to represent that variable in all calls of the function. It will be initialized only the first time the thread of execution reaches its definition. For example: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... A static variable provides a function with ‘‘a memory’’ without introducing a global variable that might be accessed and corrupted by other functions (see also §10.2.4). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 04:23 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВстретил такой пример, у BS ... Разбери этот код, будет понятнее что такое static Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 07:04 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
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 теперь вроде бы работает как надо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 07:35 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
Картежниктеперь вроде бы работает как надо Код: plaintext 1. Внимательно читай https://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v=vs.85).aspx Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 07:40 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryОбъекты объявленные в теле цикла являются автоматическими, это так. И потому они действительно должны автоматически уничтожиться, не вызывая утечек. Цикл тут не при чём. Для объектов, размещённый на стеке, конструктор и деструктор вызываются автоматически, выделение памяти происходит на этапе компиляции (это значит, что если в системе на хватит памяти, исполняемый файл просто не запустится с ошибкой памяти). SashaMercuryНо как это должно наверняка происходить в цикле ? SashaMercury, честно говоря, Вы можете это спокойно проверить порядок вызова конструкторов-деструкторов для конкретной единицы компиляции. Написать простенький тест. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Ещё надёжнее посмотреть ассемблер, но это здесь лишнее. К стати, если убрать строчку t.i = i;, результаты могут решительно поменяться :) В прочем, не столь решительно они всё равно могут поменяться в зависимости от настроек компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 08:57 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
Дмитрий, Анатолий, спасибо. Теперь окончательно понял, глобальный объект с локальной областью видимости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 13:29 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
КартежникОбъявляю массив в цикле, что будет происходить при каждом шаге? Очистится ли уже ненужный и создастся новый буфер ? Не будет ли утечки? Здесь бывают случаи когда буфер может быть не полностью забит, а только какая та его часть. Код: plaintext 1. 2. 3. 4. 5. 1. в этом цикле, buf автоматический объект ? (считаю что да) 2. Согласно стандарту он должен создавать на каждой итерации, и уничтожаться в конце каждой итерации ? (не знаю) 3. Было бы быстрее если бы объект buf был создан один раз и уничтожен при выходе из цикла ? (считаю что да) 4. Если поведение по пункту 2, то лучше объявить buf с квалификатором static ? (считаю да) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 13:33 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКартежникОбъявляю массив в цикле, что будет происходить при каждом шаге? Очистится ли уже ненужный и создастся новый буфер ? Не будет ли утечки? Здесь бывают случаи когда буфер может быть не полностью забит, а только какая та его часть. Код: plaintext 1. 2. 3. 4. 5. 1. в этом цикле, buf автоматический объект ? (считаю что да) 2. Согласно стандарту он должен создавать на каждой итерации, и уничтожаться в конце каждой итерации ? (не знаю) 3. Было бы быстрее если бы объект buf был создан один раз и уничтожен при выходе из цикла ? (считаю что да) 4. Если поведение по пункту 2, то лучше объявить buf с квалификатором static ? (считаю да)1. да 2. да 3. да 4. нет, лучше объявить buf перед циклом, статик здесь совершенно ни к чему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 13:48 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryпропущено... 1. в этом цикле, buf автоматический объект ? (считаю что да) 2. Согласно стандарту он должен создавать на каждой итерации, и уничтожаться в конце каждой итерации ? (не знаю) 3. Было бы быстрее если бы объект buf был создан один раз и уничтожен при выходе из цикла ? (считаю что да) 4. Если поведение по пункту 2, то лучше объявить buf с квалификатором static ? (считаю да)1. да 2. да 3. да 4. нет, лучше объявить buf перед циклом, статик здесь совершенно ни к чему egorych, ответ на пункт (3) в данном случае -- НЕТ (в общем случае -- ДА). Я уверен, ты просто описался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:00 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
egorych, но если buf объявлен внутри цикла, и мы его не выносим, установка данного объекта в static даст выигрыш по времени ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:05 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
MasterZivegorych, ответ на пункт (3) в данном случае -- НЕТ (в общем случае -- ДА). Я уверен, ты просто описался.да, MasterZiv, спасибо за поправку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:09 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
А почему в данном случае ответ на пункт 3 должен быть отрицательным ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:09 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryegorych, но если buf объявлен внутри цикла, и мы его не выносим, установка данного объекта в static даст выигрыш по времени ? По времени выигрыша не будет, наоборот. Если массив инициируется, это происходит один раз. После инициализации массив не деинициализируется (потому что это POD). Небольшой проигрыш будет при наличии инициализатора из-за проверки, инициализирована ли уже переменная. Впрочем, я уверен, оптимизирующий компилятор это достаточно хорошо оформит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:10 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryegorych, но если buf объявлен внутри цикла, и мы его не выносим, установка данного объекта в static даст выигрыш по времени ?так рассуждая, мы стремительно дойдём до того, что локальные переменные не нужны, и все данные будем хранить только в глобальных объектах ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:11 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
Т.е. мы не будем иметь поведение, которые мы должны иметь согласно стандарту ? Массив не будет создаваться и уничтожаться на каждой итерации цикла ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:12 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА почему в данном случае ответ на пункт 3 должен быть отрицательным ? автор3. Было бы быстрее если бы объект buf был создан один раз и уничтожен при выходе из цикла ? (считаю что да) В данном случае этот массив-буфер находится в стеке и ни на его создание, ни на его удаление (деинициализацию) не тратится ничего. Стоимость его инициализации -- 0, деинициализации -- тоже 0. Поэтому место его объявления влияет только на область видимости переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:15 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryно если buf объявлен внутри цикла, и мы его не выносим, установка данного объекта в static даст выигрыш по времени ? Нет, т.к. для этого в обоих случаях никаких операций не выполняется во время работы программы. При работе программы не происходит никакого выделения памяти для явно объявленных переменных. Хоть глобальных, хоть локальных. Этим занимается компилятор. static хуже тем что будет занимать память на протяжении всего времени работы программы и требует инициализации при старте программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:17 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТ.е. мы не будем иметь поведение, которые мы должны иметь согласно стандарту ? Массив не будет создаваться и уничтожаться на каждой итерации цикла ? Будет. Но выигрыша не будет. Потому что это POD, создание и уничтожение -- пустые операции. Кроме того (и вообще это самое главное) static и auto имеют важные семантические различия -- время инициализации и жизни и потокобезопасность катастрофически разные, поэтому обычно вопрос заменять одно на другое из-за скорости вообще не стоит -- семантика определяющая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:18 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
У меня остался один вопрос. Как можно создать и удалить объект за t=0 ? Насчёт удалить понимаю, такой операции видимо даже не будет, просто компилятор не вспомнит что по этому адресу что-то расположено. Но как он может выделить память за нулевое время, не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 14:36 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
SashaMercuryУ меня остался один вопрос. Как можно создать и удалить объект за t=0 ? Насчёт удалить понимаю, такой операции видимо даже не будет, просто компилятор не вспомнит что по этому адресу что-то расположено. Но как он может выделить память за нулевое время, не понимаю. так можно и скорость света превысить Оно нулевое там где ты смотришь, но выделение памяти все-таки происходит, но при старте программы: выделяется один большой кусок под все переменные, он называется стэк. В стэке компилятор распределяет место под хранение содержимого переменных. "Область видимости" определяет когда занята конкретная ячейка в стэке. Т.е. просто компилятор отслеживает чтобы место занятое переменной не использовалось другими переменными пока она в области видимости. В эти моменты выделение/освобождение памяти не происходит, при объявлении переменной вообще ничего не происходит во время выполнения. Запусти в релизе Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. у меня такой результатa 0012FF74 b 0012FF78 c 0012FF78 c=2 т.е. место где хранилась b стало ненужным и это же место использовано под c а т.к. я забыл инициализировать с, то там оказалось то что было в b ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 15:23 |
|
||
|
очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?
|
|||
|---|---|---|---|
|
#18+
Отличный пример. Спасибо :) 1. Стек ограничен ?(думаю да) 2. Происходит ли проверка во время раздачи адресов объектам ? Просим мы адрес на буфер из 1000 целых, хранитель стека мне даст любой адрес, или проверит, есть ли в стеке столько памяти ? Вероятно проверит 3. Раздача этих адресов происходит во время выполнения, или во время компиляции ? Видимо во время компиляции. Тогда всё понятно. Верно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 15:36 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38884997&tid=2018446]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 178ms |

| 0 / 0 |
