Я не уверен, что мой вопрос правильно объясняет мою проблему, но я сделал следующие наблюдения: у меня есть следующая программа 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» ему нужен только один бит, тогда как в первом случае переменной все еще можно присвоить максимальное двойное значение, и, следовательно, ему нужно больше места. Является ли это предположение правильным, и если да, можно ли это предотвратить с помощью некоторых ключевых слов компилятора или других методов (изображение должно иметь одинаковый размер в обоих случаях)?