В ранних версиях MAC OS (Classic) они использовали верхние 8 бит для менеджера памяти. Ptrs 68000, где максимум 24 бита, в то время как адрес регистрируется там, где 32 бита.

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

for(size_t i = 0; i < 100; ++i) {
    char *p = new char[123];
    if(reinterpret_cast<size_t>(p) % 4) {
        cout << "*";
        system("pause");
    }
    cout << reinterpret_cast<void *>(p) << endl;
}
for(size_t i = 0; i < 100; ++i) {
    short *p = new short[123];
    if(reinterpret_cast<size_t>(p) % 4) {
        cout << "*";
        system("pause");
    }
    cout << reinterpret_cast<void *>(p) << endl;
}
for(size_t i = 0; i < 100; ++i) {
    float *p = new float[123];
    if(reinterpret_cast<size_t>(p) % 4) {
        cout << "*";
        system("pause");
    }
    cout << reinterpret_cast<void *>(p) << endl;
}
system("pause");

Я использую компилятор Visual C ++ Express 2008. Кажется, что все адреса, возвращаемые новой операцией, выровнены. Но я не уверен. Поэтому мой вопрос: есть ли гарантия? Если у них есть гарантия, я не должен настраиваться, если нет, я должен.

Ответы на вопрос(1)

Ваш ответ на вопрос