powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Значения глобальных констант всегда подставляются непосредственно в код?
7 сообщений из 7, страница 1 из 1
Значения глобальных констант всегда подставляются непосредственно в код?
    #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
Значения глобальных констант всегда подставляются непосредственно в код?
    #38619960
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под extern.
...
Рейтинг: 0 / 0
Значения глобальных констант всегда подставляются непосредственно в код?
    #38620232
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не всегда. Только по возможности.
...
Рейтинг: 0 / 0
Значения глобальных констант всегда подставляются непосредственно в код?
    #38620771
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинЗначения глобальных констант всегда подставляются непосредственно в код или бывают случаи когда под них выделяется память?Это зависит от оптимизатора. В твоем примере нету выделения памяти именно потому что оптимизатор увидел не нужность этого выделения.
Но если оптимизатор не найдет способа воткнуть константу напрямую в код, то она ляжет в .data сегмент.

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

mayton не совсем прав - extern переменные обычно видимы в нескольких единицах трансляции и это обычно выводит переменную из потенциальных регистровых констант. Но такие константы все равно могут быть оптимизированы и вставлены в код.
...
Рейтинг: 0 / 0
Значения глобальных констант всегда подставляются непосредственно в код?
    #38620791
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owlmayton не совсем прав - extern переменные обычно видимы в нескольких единицах трансляции и это обычно выводит переменную из потенциальных регистровых констант. Но такие константы все равно могут быть оптимизированы и вставлены в код.
Оптимизированы на уровне линкера имеется ввиду?
...
Рейтинг: 0 / 0
Значения глобальных констант всегда подставляются непосредственно в код?
    #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
Значения глобальных констант всегда подставляются непосредственно в код?
    #38620841
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинWhite Owlmayton не совсем прав - extern переменные обычно видимы в нескольких единицах трансляции и это обычно выводит переменную из потенциальных регистровых констант. Но такие константы все равно могут быть оптимизированы и вставлены в код.
Оптимизированы на уровне линкера имеется ввиду?

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


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