Переменные смежны в стеке?

Мне интересно, являются ли массивы a и b в приведенном ниже коде смежными в памяти:

int main() {
int a[3];
int b[3];

return 0;
}

a[0],a[1] а также a[2] должны быть смежными и одинаковыми для b, но есть ли гарантии того, где b будет распределен по отношению к a?

Если нет, есть ли способ заставить a а также b быть смежным друг с другом? т.е. чтобы они располагались рядом друг с другом в стеке.

5

Решение

нет, C ++ не дает никаких гарантий относительно расположения этих переменных в памяти. Один или оба могут даже не быть в памяти (например, если они оптимизированы)!

Чтобы получить относительный порядок между этими двумя, по крайней мере, вы должны были бы заключить их в struct или же class и даже в этом случае необходимо учитывать выравнивание / выравнивание.

16

Другие решения

Там нет гарантии, что отдельные переменные будут рядом друг с другом в стеке.

В вашем примере вы можете «обмануть» и смоделировать то, что вы ищете, выполнив это:

int main()
{
int buffer[6]
int *a = buffer;
int *b = buffer+3;

return 0;
}

Теперь, когда вы пишете a[4] вы на самом деле напишите b[0],

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector