Существует множество ответов относительно SO относительно переменных, объявленных в заголовке как const
, static
или extern
.
Но я не понимаю, является ли переменная const
в заголовке, котораяимеет внутреннюю связь, означает ли это, что эта переменная будет занимать пространство памяти в исполняемом эквиваленте для нескольких единиц перевода, в которые была включена переменная?
Например, рассмотрим это (комментарии - мое понимание, пожалуйста, исправьте, если неправильно):
header.h
static int var1 = 1; // each TU has it's own copy, consumes extra memory for each inclusion
const int var2 = 2; // same as above, exe consumes memory multiple of TU inclusions
extern int var3; // variable is unique, consumes memory only in a single place.
Насколько я понимаю, static
и const
одинаковы, оба имеют внутреннюю связь, есть несколько копий, за исключением того, что constне может быть изменено.
В основном, в чем разница между const
и static
в отношении потребления памяти, и в этом случае TU будет (или не будет) иметь несколько копий этих переменных?
ОБНОВЛЕНИЕ
Я также видел такие объявления:
const static int x = 0;
, если и static, и const подразумевают внутреннюю связь, в чем смыслвыше декларации тогда? почему бы просто не использовать:
const int x = 0;
это одно и то же? или есть разница?