Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 19:26   #161
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

anyx
Цитата:
Что? А как, по вашему, возможно, что переменная будет существовать и не будет инициализирована?
с++ умеет создавать неинициализированные адресные переменные.
the_deer_one вне форума Ответить с цитированием
Старый 12.12.2011, 19:34   #162
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от the_deer_one Посмотреть сообщение
anyx

с++ умеет создавать неинициализированные адресные переменные.
Я конечно не много не понял, что такое адресные переменные, но верно, int a; и бог его знает что там будет внутри. Про выделение памяти и ее содержание тем более. Просто в кучи место выделяется и мапится на уже вполне реально использованное место ранее. Для этого и ZeroMemory и struct .. = {0}; и другие вещи для зануления переменной и куска памяти.

Я это упоминал в своем сообщение первом, что если сделать это в языке по умолчанию, то сразу уберает множество потенциальных ошибок. Особенно когда работаешь в Debug режиме, и все работает, а после компилишь в Release, и получаешь не вылет с ошибкой обращением к невалидному адресу, и попробуй теперь найди ту ошибку.
BOBAH13 вне форума Ответить с цитированием
Старый 12.12.2011, 20:57   #163
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Что? А как, по вашему, возможно, что переменная будет существовать и не будет инициализирована?
Не напрягаясь . В третий раз упоминаю Дельфи. Частый косяк новичка - объявляют переменную, но забывают инициализировать.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 12.12.2011 в 21:00.
Utkin вне форума Ответить с цитированием
Старый 12.12.2011, 21:02   #164
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Частый косяк новичка - объявляют переменную, но забывают инициализировать.
в Делфи-ООП объявляют указатель на объект, соответственно надо его создать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.12.2011, 13:40   #165
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Не напрягаясь . В третий раз упоминаю Дельфи. Частый косяк новичка - объявляют переменную, но забывают инициализировать.
Ну вот я об этом и говорю. Не инициализированная переменная никак не может использоваться, так зачем оставлять их, если это такой повод для ошибки?
anyx вне форума Ответить с цитированием
Старый 13.12.2011, 13:49   #166
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Ну вот я об этом и говорю. Не инициализированная переменная никак не может использоваться, так зачем оставлять их, если это такой повод для ошибки?
Это скорость. Объясняю - например, требуется операция z=x+y. Как видите переменную z инициализировать глупо, поскольку Ваш нуль все равно будет затерт результатом сложения. Если начнете суммировать матрицы (а это операция не редкость + как правило ресурсоемкая) получите увеличение производительности, если будете инициализировать переменные явно и вручную.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.12.2011, 13:56   #167
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Это скорость. Объясняю - например, требуется операция z=x+y. Как видите переменную z инициализировать глупо, поскольку Ваш нуль все равно будет затерт результатом сложения
Так переменная создаётся прямо в этом месте и инициализируется суммой. Естественно для увеличения производительности компилятор выделит под неё место в стеке ещё в начале функции (точнее сгенерирует код выделения места в стеке), но доступа к этой переменной не будет, т.к. она не будет инициализирована, и её правильное использование будет невозможно.

И да - компилятор обычно оптимизирует код, удаляя ненужные операции. Т.е. если вы инициализируете переменную, а потом присвоите ей другое значение, то код инициализации будет удалён

Последний раз редактировалось anyx; 13.12.2011 в 14:15.
anyx вне форума Ответить с цитированием
Старый 13.12.2011, 14:34   #168
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Так переменная создаётся прямо в этом месте и инициализируется суммой. Естественно для увеличения производительности компилятор выделит под неё место в стеке ещё в начале функции (точнее сгенерирует код выделения места в стеке), но доступа к этой переменной не будет, т.к. она не будет инициализирована, и её правильное использование будет невозможно.
Не все компиляторы такие умные. Шаблоны могут на раз перечеркнуть такой подход для сложных типов данных.

Цитата:
И да - компилятор обычно оптимизирует код, удаляя ненужные операции. Т.е. если вы инициализируете переменную, а потом присвоите ей другое значение, то код инициализации будет удалён
Тоже не всегда. Все красиво только на бумаге. В реальности если Вы объявили переменную то для z будет вставлена операция z=0. И только после вычисления х и у результат суммы будет помещен в z. Таким образом как минимум одно зануление будет лишним.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.12.2011, 15:53   #169
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Не все компиляторы такие умные. Шаблоны могут на раз перечеркнуть такой подход для сложных типов данных.
Согласен. Значит стоит продумать систему типов так, чтобы компилятор мог иметь максимум информации о данных.

Не знаю, каково отношение Пепла Феникса к шаблонам, но я отношусь к ним крайне негативно. Они создают описанную выше проблему, увеличивают объём выходного файла. Я считаю, что нужно искать другой путь для обобщённого программирования.

Цитата:
Сообщение от Utkin Посмотреть сообщение
Тоже не всегда. Все красиво только на бумаге. В реальности если Вы объявили переменную то для z будет вставлена операция z=0. И только после вычисления х и у результат суммы будет помещен в z. Таким образом как минимум одно зануление будет лишним.
Я как раз об этом случае и говорил. Операция инициализации переменной z будет удалена оптимизатором, т.к. значение z не будет использоваться до присваивания. Конечно, подобные оптимизации могут плохо работать для сложных типов данных (этот вопрос надо изучить), об этом я сказал выше.
anyx вне форума Ответить с цитированием
Старый 13.12.2011, 15:59   #170
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Конечно, подобные оптимизации могут плохо работать для сложных типов данных (этот вопрос надо изучить), об этом я сказал выше.
Особенно для struct на каком-нибудь TList
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли подобный текст перевести на человеческий язык? alexxx777 Помощь студентам 0 24.05.2010 19:56
Как создать вид подобный SolidWorks. KemanSR Общие вопросы C/C++ 6 04.05.2010 21:30
Добавить модуль в phpnuke-подобный движок Able2Know Фриланс 3 23.04.2010 16:29
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55