Re[2]: выравнивание и массивы
От: Аноним  
Дата: 03.02.08 09:42
Оценка:
R>Элементы массива располагаются с тем же выравниваем, что и отдельные переменные.

видимо я что-то не понимаю
почему под виндой из msvs 2003 код
#include <iostream>
#pragma pack(8)

int main() {
    char a_c[2];
    int  a_i[2];
    struct s_c{char c1; char c2;} s_c_o;
    struct s_i{int i1; int i2;} s_i_o;
    struct s_c_i{char c1; int i2;} s_c_i_o;


    std::cout << "a_c =>   size: " << sizeof (a_c) << "\tdiff: " << (int)&a_c[1] - (int)&a_c[0] << std::endl;    
    std::cout << "a_i =>   size: " << sizeof (a_i) << "\tdiff: " << (int)&a_i[1] - (int)&a_i[0] << std::endl;    

    std::cout << "s_c =>   size: " << sizeof (s_c) << "\tdiff: " << (int)&s_c_o.c2 - (int)&s_c_o.c1 << std::endl;    
    std::cout << "s_i =>   size: " << sizeof (s_i) << "\tdiff: " << (int)&s_i_o.i2 - (int)&s_i_o.i1 << std::endl;    
    std::cout << "s_c_i => size: " << sizeof (s_c_i) << "\tdiff: " << (int)&s_c_i_o.i2 - (int)&s_c_i_o.c1 << std::endl;    



    return 0;
}


дает на выходе:
a_c =>   size: 2    diff: 1
a_i =>   size: 8    diff: 4
s_c =>   size: 2    diff: 1
s_i =>   size: 8    diff: 4
s_c_i => size: 8    diff: 4


1. правильно я понимаю, чтоо на однотипные типы выравнивание не распостраняется?
2. почему в структуре s_c_i размер 8? ведь выравнивание стоит в 8, и вроде бы как размер должен быть 12?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.