Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объясните разницу 
:(
    Опции темы
feodorv
Дата 13.8.2015, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(wowka19 @  12.8.2015,  09:11 Найти цитируемый пост)
В обоих случаях v - имя участка статической памяти под int?

Для глобальной переменной - да. Здесь const подразумевает static. Если, например, в заголовочном файле определить константную строку:
Код

#ifndef xMyHeader
#define xMyHeader

const char v[] = "Very long string";

#endif

то эта строка будет дублироваться в каждом компилируемом файле, который сделал #include "MyHeader". Что может повлечь за собой дополнительные расходы на размер исполняемого файла.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
TarasProger
Дата 13.8.2015, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Код
void f()
{
 static i=2;
}
void d()
{
 static i=4;
}
. Переменные две, но они статик.
PM MAIL   Вверх
wowka19
Дата 17.8.2015, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



Цитата(feodorv @  13.8.2015,  11:17 Найти цитируемый пост)
Для глобальной переменной - да. Здесь const подразумевает static.

feodorv, извините, я наверное уже достал, но у меня static явно указан:
Вариант 1:
Код

const static int v = 42;

Вариант 2:
Код

const int &v = 42;

Что бы расставить все точки:
- в первом варианте в какой памяти находится значение? статической или автоматической(стек)?
- во втором варианте в какой памяти находится значение? статической или автоматической(стек)?
Спасибо!
PM MAIL   Вверх
TarasProger
Дата 17.8.2015, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Цитата(wowka19 @  17.8.2015,  08:37 Найти цитируемый пост)
Что бы расставить все точки:
- в первом варианте в какой памяти находится значение? статической или автоматической(стек)?
В статической.

Цитата(wowka19 @  17.8.2015,  08:37 Найти цитируемый пост)
- во втором варианте в какой памяти находится значение? статической или автоматической(стек)?
А чёрт его знает. Может и при каждом вызове функции созадаваться на стеке. Но если компилятор оптимизировал этот вариант до первого, тогда в статической. Глобальной видимости не означает ни один из вариантов и если таких констант много в разных функциях, то будет создана каждая. Мало того, даже если равные константы встречаются под разными именами в одной и той же функции, то они и тогда будут продублированы.


Это сообщение отредактировал(а) TarasProger - 17.8.2015, 10:50
PM MAIL   Вверх
feodorv
Дата 17.8.2015, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(wowka19 @  17.8.2015,  08:37 Найти цитируемый пост)
но у меня static явно указан

Для константной глобальной (file scope, т.е. определённой вне функции или класса без указания extern) переменной действителен квалификатор static (указан он или нет).


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
volatile
Дата 17.8.2015, 14:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(wowka19 @  17.8.2015,  08:37 Найти цитируемый пост)
- в первом варианте в какой памяти находится значение?

После оптимизации, как в первом, так и во втором случае, константа вообще ни в какой памяти не будет находится.
т.е. под константу не определяется какой-то физический адрес, а значение просто подставляется в код в необходимых местах.
т.е. полный аналог сишного #define v 42

Но это только в том случае, если где либо в программе не встретиться указатель (который нельзя соптимизировать) на эту константу.
В этом случае компилятор будет вынужден разместить ее в статической памяти, и дать ее адрес.

В общем зависит от дальнейшего кода.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0934 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.