Как я могу предотвратить преобразование типов данных stati c в C ++ с помощью g cc? - PullRequest
0 голосов
/ 01 апреля 2020

Я не уверен, что мой вопрос правильно объясняет мою проблему, но я сделал следующие наблюдения: у меня есть следующая программа C ++, которую я компилирую на Ubuntu 64bit с параметрами по умолчанию:

g++ test.c

test1. c:

int main() {
    double a = 1;
}

test2. c:

int main() {
    static double a = 1;
}

Программы имеют следующую структуру памяти:

$ size test1.out 
   text    data     bss     dec     hex filename
   1443     544       8    1995     7cb a.out
$ size test2.out 
   text    data     bss     dec     hex filename
   1415     552       8    1975     7b7 a.out

Мое предположение для различных макетов состоит в том, что во втором случае компилятор знает, что для отображения «1» ему нужен только один бит, тогда как в первом случае переменной все еще можно присвоить максимальное двойное значение, и, следовательно, ему нужно больше места. Является ли это предположение правильным, и если да, можно ли это предотвратить с помощью некоторых ключевых слов компилятора или других методов (изображение должно иметь одинаковый размер в обоих случаях)?

...