Как компилятор C++ организует переменные, которые инициализируются в функции для их хранения, чтобы компьютер нашел их самым быстрым способом?Распределение памяти в стеке переменных в C++
Я понимаю, что компилятор ставит их один за другим в стек, но за ним должна быть какая-то логика, я искал Google несколько часов подряд, но я ничего не мог найти.
Например:
int main()
{
float a;
int b;
char c;
double d;
}
Это должно занимать больше памяти, чем один ниже из-за способа C++ компилятор хранения в памяти.
Точные биты, используемые, конечно же, но они должны храниться в более эффективном порядке в приведенном ниже примере. Где в памяти эти переменные будут храниться компилятором в следующем примере? Насколько я понял, переменная всегда хранится на блоке таким образом, что (logical number) % (number of bytes the datatype) = 0
int main()
{
char c;
int b;
float a;
double d;
}
'stack' не единственный способ реализовать автоматические переменные – coderredoc
@coderredoc: для стандарта C++ требуется поведение стека для автоматических локальных переменных, поэтому это единственный способ. Как этот пакет реализован не предписан. –
@MSlayer: Определен порядок переменных области пространства имен в каждой единицы перевода. Определен порядок элементов данных с тем же уровнем доступа в данном экземпляре класса. Порядок локальных автоматических переменных (в памяти) не определен. Реализация может свободно перемещать их. Однако он должен гарантировать, что конструкторы вызываются в порядке объявления переменных, а наоборот - для деструкторов. –