Когда в Visual Studio хранятся 2 типа int, разница между их местоположениями составляет 12 байт.Для этого есть причина? - PullRequest
4 голосов
/ 04 февраля 2011

Когда я запускаю следующую программу в VC ++ 2008 Express, я получаю разницу в расположении между двумя последовательно сохраненными целыми числами как «12» вместо ожидаемого «4».На любом другом компиляторе ответом будет «4».Есть ли конкретная причина, почему «12»?

#include <iostream>
using namespace std;

int main()
{
    int num1, num2;
    cin >> num1 >> num2;
    cout << &num1 << endl << &num2 << endl;
    cout << int(&num1) - int(&num2)<<endl; //Here it shows difference as 12.
    cout << sizeof(num1);                  //Here it shows the size as 4.
    return 0;
}

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011

Я собираюсь сделать дикое предположение и сказать, что вы построили его в режиме отладки. Попробуйте собрать его в режиме релиза и посмотреть, что вы получите. Я знаю, что C ++ во время выполнения поместит средства защиты памяти вокруг выделенной памяти в режим отладки, чтобы отследить переполнение буфера. Я не знаю, делает ли это что-то похожее с переменными в стеке.

0 голосов
/ 04 февраля 2011

Возможно, вы разрабатываете код для компьютера в Китае или, возможно, имеется небольшой и редкий недостаток конкретного используемого вами оборудования.Одна старая модель испытывает трудности с большими числами, когда устанавливаются верхние биты, и если переменные находятся в смежных областях памяти, было обнаружено, что накопление заряда в памяти ядра может оказывать перекрестное влияние на соседние области памяти и изменять содержимое.Другими возможностями являются запасные области памяти для обнаружения переполнений и недопустимостей, и может случиться так, что вы работаете с 32-битным программным обеспечением, сопоставленным с 48-битной аппаратной архитектурой, которая стала новой моделью с резервными битами и байтами, которые не используются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...