Может кто-нибудь помочь мне понять соглашения об управлении gcc-именами?G ++ name mangling глобальных константных переменных
Рассмотрим следующий пример тестового кода
#include <stdio.h>
const int x = 42;
int y = 42;
int main(int argc, const char* argv[])
{
return 0;
}
При запуске nm
я получаю следующее (неожиданное?) Результат:
0000000000000000 T main
0000000000000000 D y
0000000000000000 r _ZL1x
Это показывает, что компилятор только искалечил глобальные переменные, помещенные в только для чтения раздел. Я бы ожидал, что компилятор либо нарушит глобальные переменные ALL, либо NO
Это намеренное поведение? Для меня это выглядит непоследовательно.
Вы компилируете C или C++? Также обратите внимание, что 'x' неявно является' static' (по крайней мере, на C++), а 'y' - нет. – Angew
неявно 'static' действительно? Это означает, что в двух разных единицах компиляции видимые адреса 'x' будут разными? Вау. Хорошо знать. К счастью, C не играет в такие игры. –
Я компилирую как C++ –