Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Значения глобальных констант всегда подставляются непосредственно в код? / 7 сообщений из 7, страница 1 из 1
21.04.2014, 00:37
    #38619953
Вася Уткин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значения глобальных констант всегда подставляются непосредственно в код?
Значения глобальных констант всегда подставляются непосредственно в код или бывают случаи когда под них выделяется память? Например, когда мы создаем на неё ссылку или указатель указывающий на память глобальной константы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
const int n = 32; // no memory allocation

int main() {
 
 char array[n];
 int len = n;
 

 return 0;
}
...
Рейтинг: 0 / 0
21.04.2014, 01:08
    #38619960
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значения глобальных констант всегда подставляются непосредственно в код?
Под extern.
...
Рейтинг: 0 / 0
21.04.2014, 11:52
    #38620232
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значения глобальных констант всегда подставляются непосредственно в код?
Не всегда. Только по возможности.
...
Рейтинг: 0 / 0
21.04.2014, 18:25
    #38620771
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значения глобальных констант всегда подставляются непосредственно в код?
Вася УткинЗначения глобальных констант всегда подставляются непосредственно в код или бывают случаи когда под них выделяется память?Это зависит от оптимизатора. В твоем примере нету выделения памяти именно потому что оптимизатор увидел не нужность этого выделения.
Но если оптимизатор не найдет способа воткнуть константу напрямую в код, то она ляжет в .data сегмент.

Если хочешь принудительно вывести переменную из-под оптимизации, объяви ее volatile.

mayton не совсем прав - extern переменные обычно видимы в нескольких единицах трансляции и это обычно выводит переменную из потенциальных регистровых констант. Но такие константы все равно могут быть оптимизированы и вставлены в код.
...
Рейтинг: 0 / 0
21.04.2014, 18:58
    #38620791
Вася Уткин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значения глобальных констант всегда подставляются непосредственно в код?
White Owlmayton не совсем прав - extern переменные обычно видимы в нескольких единицах трансляции и это обычно выводит переменную из потенциальных регистровых констант. Но такие константы все равно могут быть оптимизированы и вставлены в код.
Оптимизированы на уровне линкера имеется ввиду?
...
Рейтинг: 0 / 0
21.04.2014, 20:03
    #38620831
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значения глобальных констант всегда подставляются непосредственно в код?
Вася УткинОптимизированы на уровне линкера имеется ввиду?Ну теоретически и это тоже вполне возможно, хотя я и не встречал такого в реальности.

Но вообще-то я имел в виду такую ситуацию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// main.c
#include <stdio.h>
const int a = 10;

int main(int argc, char **argv) {
	printf("%d\n", a);
	foo();
	return 0;
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// foo.c
#include <stdio.h>
extern int a;

void foo() {
	printf("%d\n", a);
}

Если это собрать и запустить, то программа выдаст две десятки.
Но при этом в main.s будет видно что эта десятка вложена в код. А в foo.s будет обращение по ссылке.
...
Рейтинг: 0 / 0
21.04.2014, 20:14
    #38620841
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значения глобальных констант всегда подставляются непосредственно в код?
Вася УткинWhite Owlmayton не совсем прав - extern переменные обычно видимы в нескольких единицах трансляции и это обычно выводит переменную из потенциальных регистровых констант. Но такие константы все равно могут быть оптимизированы и вставлены в код.
Оптимизированы на уровне линкера имеется ввиду?

Можно и на уровне компилятора.
Если константа используется по значению , и это значение известно, то можно вставить это значение непосредственно.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Значения глобальных констант всегда подставляются непосредственно в код? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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