본문 바로가기

IT

[ C언어 ] 플랫폼, 시스템 특성(endian, memory alignment)을 판단하는 예제

반응형


 

안녕하세요.
C언어 예제로 간단하게 시스템 특성을 알아보는 예제입니다.







1. Byte Ordering Test


[ 예제소스 1-1 ]

int main()
{
unsigned char * p;
unsigned int test=0x12345678;
p=(unsigned char *)&test;
printf("%02x %02x %02x %02x ",*p,*(p+1),*(p+2),*(p+3));
return 0;
}  



1. Little Endian (LSB First) : 78 56 34 12 

2. Big Endian (MSB First) : 12 34 56 78  




2. Long Long and Double Byte Ordering Test


[ 예제소스 2-1 ]
   
int main()
{
unsigned char * p;
double test= 0x1020304050607080;

p = (unsigned char *)&test;
printf("%02x %02x %02x %02x %02x %02x %02x %02x", p,*(p+1),*(p+2),*(p+3),*(p+4),*(p+5),*(p+6),*(p+7));
return 0;



1. Pure Endian
-1 *Big-endian  : 43 b0 20 30 40 50 60 70
-2 Little-endian : 70 60 50 40 30 20 b0 43 

2. Mixed Endian
-1 Big-endian : 40 50 60 70 43 b0 20 30
-2 *Little-endian : 30 20 b0 43 70 60 50 40   




3. Memory Alignment Test


 
[예제 소스 3-1]

struct struct_align
{
double d;
char c;
} align;

int main()
{

struct struct_align a[2];
struct struct_align *p, *p1;
printf("sizeof(struct_align)=%ld\n", (long)sizeof(struct struct_align));

p = &a[0];
p1 = &a[1];

if (2*(sizeof(double)) != ((long)(p1) - (long)(p)))
printf("4 byte alignment\n");
else
printf("8 byte alignment\n");

return 0;

}

 

1. 4 byte alignment 
2. 8 byte alignment 




반응형