как узнать спецификатор доступа, используемый компилятором в c - PullRequest
1 голос
/ 09 августа 2011

Есть ли способ узнать спецификатор доступа, используемый компилятором в c. Например- В случае переменных регистров все зависит от компилятора, который решает, будет ли спецификатор доступа к переменной автоматически или регистром. Есть ли способ динамически знать, какой спецификатор доступа выбран компилятором?

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Мы смешиваем уровень спецификации языка и реализацию вашей программы в машинном коде.Два термина «регистр» здесь только слабо связаны.

Формулировка ключевого слова register просто сбивает с толку, неправильно.register только означает, что вам не разрешено брать адрес такой переменной.Независимо от того, реализует ли ваш компилятор переменную в стеке и обращается ли она непосредственно или сохраняет ее в регистре ЦП, нет ничего стабильного, на что вы можете положиться.Это изменится от компилятора к версии компилятора и уровню оптимизации.

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

1 голос
/ 09 августа 2011

Скомпилируйте модуль C для сборки и прочитайте это. Имейте в виду, что некоторые компиляторы могут выполнять оптимизацию всей программы непосредственно перед компоновкой, поэтому даже вывод ассемблера не на 100% надежен.

1 голос
/ 09 августа 2011

Вы можете взять адрес переменной и получить подсказку в зависимости от архитектуры. Но такой подход, вероятно, заставит компилятор размещать переменную в памяти вместо регистра.

...