Интересно, как C ++ обрабатывает переменные так, чтобы расстояние между двумя адресами в памяти целочисленных переменных, объявленных и инициализированных одна за другой, составляло 3537492 — 3537480 = 12 (я предполагаю биты (?))
#include <cstdio>
using namespace std;
int main( int argc, char ** argv )
{
int x = 1;
int y = 2;
printf("int:\t%d\n", sizeof(int));
printf("unsigned int:\t%d\n", sizeof(unsigned int));
printf("Address of x\n\tHex:\t%p\n\tDec:\t%d\n", &x, &x);
printf("Address of y\n\tHex:\t%p\n\tDec:\t%d\n", &y, &y);
return 0;
}
Выход:
int: 4 без знака int: 4 Адрес х Hex: 0035FA54 Дек: 3537492 Адрес у Hex: 0035FA48 Дек: 3537480
мой Угадай было бы то, что компилятор выравнивает целые числа по границе слова по какой-то причине производительности. Если слово составляет 128 бит или 16 байтов, то такое поведение приведет к расстоянию между переменными 12 байтов. Чтобы понять, прав ли я, вам нужно немного больше понять архитектуру, которую вы собираете. Не каламбур предназначен. Увидеть http://en.wikipedia.org/wiki/Data_structure_alignment
Расстояние между двумя переменными в памяти чаще всего является бессмысленным числом. Основным исключением являются два элемента массива.
Это не исключение: число, которое вы получите, по стечению обстоятельств равно 12. Если вы попытаетесь посчитать его «синим», технически это будет юридический результат. Это потому, что сравнение несвязанных указателей является неопределенным поведением, и тогда буквально все может произойти.
Кроме того, значения, которые вы получаете, могут варьироваться от запуска к запуску. (Во многих современных операционных системах это имеет место по соображениям безопасности. Трудно взломать программу, когда она постоянно перемещается)
Я полагаю, вы скомпилировали этот код в Visual Studio отлаживать конфигурации. В этом режиме компилятор делает дополнительное распределение памяти между вашими переменными, чтобы обнаружить возможное повреждение стека. Попробуйте перейти на Релиз и вы увидите, что расстояние становится 4 байта, как и должно быть.
Больше информации по теме:
https://msdn.microsoft.com/en-us/library/8wtf2dfz.aspx