Problem z int64 w strukturze [C++]

0

Otóż mam pewien problem, którego chyba się nie da racjonalnie wytłumaczyć..

 
#include <iostream>
using namespace std;
typedef long int int32;
typedef long long int int64;
struct struktura
{
	int32 zmienna;
	int64 zmienna2;
};

int main()
{
	cout << "Sizeof(int32) = " << sizeof(int32);
	cout << "\nSizeof(int64) = " << sizeof(int64);
	cout << "\nSizeof(struktura) = " << sizeof(struktura);
	int stop;
	cin >> stop;
	return 0;
} 

Nic nadzwyczajnego, tyle że wyjście programu jest takie:

Sizeof(int32) = 4
Sizeof(int64) = 8
Sizeof(struktura) = 16 

Umie to ktoś racjonalnie wytłumaczyć?

2

Jedno słowo: alignment.

Umie to ktoś racjonalnie wytłumaczyć?

Minimalnie szybciej operuje się na paczkach po 16/32/64/... bajtów, niżeli np.dwunastu.

0

Ok, a jak jednak zrobić żeby ta struktura miała te 12 bajtów, bo nic nie mogę znaleźć na ten temat.. Bo ogólnie tą strukturę zrobiłem tak dla testu, a normalnie muszę użyć 44 bajtowej struktury, do odczytu i zapisu pliku..

0
#include <stdio.h>
 
#pragma pack(1)
struct a {
    char a;
    int c;
};
 
int main() {
    printf("%d\n", sizeof(struct a));
    return 0;
}

http://ideone.com/jhsSjP

2

__attribute__((packed)) w GCC, #pragma pack w VC/GCC. To pierwsze jest atrybutem dla danej struktury (ale nie tego co wewnątrz), a to drugie ustawia 'default' dla wszystkiego, co jest 'po'. Warto zrobić #pragma push, ustawić pack na 1 i później przywrócić starą wartość przez pop.

0

Ok, wielkie dzięki. Kiedyś działało bez problemu, ale zapewne włączyłem bibliotekę która właśnie miała #pragmę

1 użytkowników online, w tym zalogowanych: 0, gości: 1