Мне интересно, являются ли массивы a и b в приведенном ниже коде смежными в памяти:
int main() {
int a[3];
int b[3];
return 0;
}
a[0]
,a[1]
а также a[2]
должны быть смежными и одинаковыми для b
, но есть ли гарантии того, где b
будет распределен по отношению к a
?
Если нет, есть ли способ заставить a
а также b
быть смежным друг с другом? т.е. чтобы они располагались рядом друг с другом в стеке.
нет, C ++ не дает никаких гарантий относительно расположения этих переменных в памяти. Один или оба могут даже не быть в памяти (например, если они оптимизированы)!
Чтобы получить относительный порядок между этими двумя, по крайней мере, вы должны были бы заключить их в struct
или же class
и даже в этом случае необходимо учитывать выравнивание / выравнивание.
Там нет гарантии, что отдельные переменные будут рядом друг с другом в стеке.
В вашем примере вы можете «обмануть» и смоделировать то, что вы ищете, выполнив это:
int main()
{
int buffer[6]
int *a = buffer;
int *b = buffer+3;
return 0;
}
Теперь, когда вы пишете a[4]
вы на самом деле напишите b[0]
,