Если в вашей программе есть статическая переменная, она может в конечном итоге сохраниться в результирующем двоичном файле в разделе данных или в разделе BSS. Все, что находится в разделе данных, хранится в самом двоичном файле, а BSS — это раздел памяти, инициализируемый загрузчиком программы нулевым значением.
Код: Выделить всё
char chararray[100'000'000] = {};
int main()
{
printf("%c", chararray[50000]);
}
В данном случае моя программа небольшая, в разделе BSS хранится chararray. Если я добавлю к этому массиву квалификатор const, размер исполняемого файла моей программы вырастет до 100 МБ. Я знаю, что это связано с тем, что любая переменная const находится в разделе RODATA, и это соответствует соглашению/правилам исполняемого/двоичного образа. Однако с точки зрения здравого смысла нет ничего, что обязательно требовало бы, чтобы эта переменная находилась внутри изображения. Итак, я считаю, что простое правило таково:
если 'const', оно попадает в RODATA, который находится внутри двоичного изображения.
Правильно ли я понимаю?
Есть ли способ не использовать эту переменную внутри изображения? Я имею в виду без удаления константы.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... executable