[ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): alita () ³¯ Â¥ (Date): 2001³â 10¿ù 29ÀÏ ¿ù¿äÀÏ ¿ÀÈÄ 08½Ã 05ºÐ 41ÃÊ Á¦ ¸ñ(Title): [Q] C¿¡¼­ structÀÇ alignment C¿¡¼­ struct¸¦ file·Î ÀúÀåÇÏ·Á°í ÇÕ´Ï´Ù. elementµéÀ» stringÀ¸·Î ¹Ù²ã¼­ ÀúÀåÇÏ´Â°Ô °¡Àå º¸±â°¡(--;) ÁÁ±ä ÇÏÁö¸¸ ±¸Âú±âµµ ÇÏ°í µîµîÀÇ ÀÌÀ¯·Î struct¸¦ Åë°·Î file·Î writeÇÏ·Á°í Çϴµ¥¿ä, structÀÇ size°¡ 8byteÀÇ ¹è¼ö·Î ³ª¿À´Â °É·Î ¾Ð´Ï´Ù. machine, OS°¡ °°Àº °æ¿ì¿¡ compiler option¿¡ µû¶ó¼­ struct ÀÇ alignment°¡ ´Þ¶óÁú ¼ö ÀÖ³ª¿ä? gcc¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ°É C ¹®¹ýÀ¸·Î ¸·´Â ¹æ¹ýÀÌ ÀÖÀ»±î¿ä? volatileÀÌ ÀÌ¿Í °ü·ÃÀÌ Àִ°ÇÁö ¸ð¸£°Ú³×¿ä... [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): guest (as;ldjf) <211.41.41.246> ³¯ Â¥ (Date): 2001³â 10¿ù 29ÀÏ ¿ù¿äÀÏ ¿ÀÈÄ 11½Ã 24ºÐ 07ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment º¯¼ö À̸§¿¡ volatileÀ» ¾²´Â °ÍÀº C code¸¦ ±×´ë·Î(optimize ¾øÀÌ) compile Çϱâ À§ÇØ ¾²´Â °ÍÀÔ´Ï´Ù. alignment¿Í´Â ¾Æ¹« »ó°üÀÌ ¾øÀ½. alignment¿¡ ´ëÇؼ­´Â ´Ù¸¥ ºÐµéÀÌ Á¶¾ðÀ» ÁÖ½Ç °ÍÀÓ. :) packed/unpacked struct¿Í #pragma pack(?)ÀÌ Á¦°¡ ¾²´Â ´Ù¸¥ ÄÄÆÄÀÏ·¯¿¡´Â ÀÖ´ø µ¥, gcc¿¡¼­ Àß ¸ð¸£°Ú±º¿ä. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): terzeron (the cowboy) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÀü 10½Ã 40ºÐ 25ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment ¾î¶² ÇØ°áÃ¥À» ãÀ¸½Ã´Â °ÇÁö Àß ¸ð¸£°ÚÁö¸¸, struct temp { char a; int b; short c; }; ¿Í °°Àº °æ¿ì, tempÀÇ size´Â char³ª short°¡ 4byte ´ÜÀ§·Î alignµÇ¾î ÃÑ 12byte°¡ µË´Ï´Ù. ÀÌ°É Á¤È®ÇÑ size·Î packÇÏ°í ½ÍÀ¸½Ã¸é µÎ °¡Áö ¹æ¹ýÀÌ Àִµ¥, Çϳª´Â #pragma pack(1)À» Äڵ忡 ³Ö¾îÁֽðųª command-line argument·Î -fpack-struct compile optionÀ» ÁÖ½Ã¸é µË´Ï´Ù. ÀÌ °æ¿ì ÃÑ 7byte°¡ µÇ°ÚÁÒ. ¾óÇÍ µè±â·Î´Â SYSVÀ» Áö¿øÇÏ´Â ½Ã½ºÅÛ¿¡¼­´Â #pragma pack(n)ÀÌ °¡´ÉÇÏ´Ù°í µéÀº °Í °°½À´Ï´Ù. ÀÌ°Ç Á¤È®ÇÏÁö ¾Ê½À´Ï´Ù¸¸... Àú´Â FreeBSD 4.3¿¡¼­ Å×½ºÆ®Çغ¸¾Ò´õ´Ï Àß µÇ´õ±º¿ä. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (kkRunner) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÈÄ 12½Ã 01ºÐ 15ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment alignment size´Â OS¿Í CPUº°·Î Ʋ¸³´Ï´Ù. ´ëºÎºÐ (Á¦°¡ ±¸°æÇÑ) OSµéÀº 4byte¿´Áö¸¸ Compaq Tru64 Unix´Â 8byte¿´½À´Ï´Ù. Àü compiler¿¡°Ô ÁÖ´Â pack°°Àº°Ç Àß ¸ô¶ó¼­ ±×³É ´Ü¼ø ¹«½ÄÀ¸·Î ³ª°¬´Âµ¥ ±×³É ÀÌ·±½ÄÀ̾ú½À´Ï´Ù.(pack°°Àº°É ¾²´Â°Ô ¼º´É ¹®Á¦µµ ÀÖ´Ù°í ÇÏ´õ±º¿ä ¼º´ÉÀÌ °¡Àå Áß¿äÇÑ ½Ã½ºÅÛÀ̶ó.. -.-a) typedef struct { char a; short b; byte dummy; int c; /* 32bit int */ char d; byte dummy2[3] } test_t; sizeof(test_t) == 12; 8byte alignÀ» ÇÏ´Â OS¸¦ °í·ÁÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇؾßÇÕ´Ï´Ù. typedef struct { char a; byte dummy[3]; int32 b; short c; byte dummy2[6]; int64 d; char e[3]; byte dummy3[5]; } test2_t; sizeof(test2_t) == 32 ¾à°£ÀÇ ÃÖÀûÈ­¸£ ÇÑ´Ù¸é dummy°¡ Àú·¸°Ô ¸¹ÀÌ´Â ÇÊ¿ä ¾øÁö¸¸ »ùÇÃÀ̴ϱî :) ¶Ç´Â 8byte alignÀ» ÇÏ´Â OS¶óµµ compiler¿É¼ÇÀ¸·Î 4byte alignÀÌ °¡´ÉÇÕ´Ï´Ù. ¾î·µç.. Àü ±×³É ´Ü¼ø¹«½Ä -.-a ±Ùµ¥ ¿©±â¼­ network packetÀ̳ª binary data fileÀ» °í·ÁÇϸé byte orderµµ °í·ÁÇؾßÇϴµ¥... ÀÌ°Ô Á» °ñ¶§¸³´Ï´Ù. alignment size¸¶´Ù byteorder¿¡ ¸Â°Ô ¼ø¼­¸¦ ¹Ù²ãÄ¡±âÇؾßÇϴµ¥.. bit field¾ß ¸íÈ®ÇÏÁö¸¸.. À§¿Í °°Àº °æ¿ì´Â È®½ÇÈ÷ ¸ð¸£°Ú±º¿ä ¾Æ¸¶ °°À¸¸®¶ó »ý°¢ÇÏÁö¸¸¿ä.. À½.. ´©°¡ .°ñÄ¡¾ÆÇ little endianÀ» ¸¸µé¾úÀ»±î¿ä? ¾Æ¸¶ ¶óÇö󽺺¸´Ù ´õ ³ª»Û ³ÑÀÌ Æ²¸² ¾øÀ»°Ì´Ï´Ù. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): tolkien (tolkien) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÈÄ 02½Ã 13ºÐ 53ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment ±×°Íº¸´Ù javaó·³ º°µµ·Î struct2str°ú °°Àº functionÀ» »ç¿ëÇÏ´Â °ÍÀÌ ¾ÈÀüÇÏÁö ¾ÊÀ»±î¿ä? [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): terzeron (the cowboy) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÈÄ 02½Ã 42ºÐ 06ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment Àúµµ swhan´ÔÀÌ ÀÛ¼ºÇϽŠ¿¹Á¦Ã³·³ bit size°¡ ¸í½ÃµÈ typeÀ» ¾²´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù´Â »ý°¢À» ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î unsigned int´Â u_int32_t, unsigned short´Â u_int16_t ÀÌ·± °É ¾²ÀÚ´Â °ÅÁÒ. ±âº»Àº ¾î·µç ¹ÙÀÌÆ®»çÀÌÁ Á¤È®ÇÏ°Ô ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù´Â °Å´Ï±î¿ä. ±×¸®°í ³ª¼­ packingÀ» Çϵ簡 structureÀÇ field°£ Àç¹èÄ¡¸¦ Çϵ簡 °áÁ¤À» ÇÏ°í ÄÚµùÀ» Çؾ߰ÚÁÒ. ¶Ç´Â unionÀ» ÀûÀýÈ÷ ¾²¸é À̰͵µ ÇϳªÀÇ ÁÁÀº ¹æ¹ýÀÌ µÉ ¼ö ÀÖ°ÚÁÒ. Àúµµ swhan´Ô ¸»¾¸Ã³·³ packingÀº º°·Î ¾²°í ½ÍÁö ¾ÊÀº ¹æ¹ýÀÔ´Ï´Ù. ´Ü¼øÈ÷ ¼º´É¸¸ÀÇ ¹®Á¦°¡ ¾Æ´Ï¶ó codeÀÇ readability¸¦ ¶³¾î¶ß¸®´Â °Í °°°Åµç¿ä. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (kkRunner) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÈÄ 03½Ã 14ºÐ 05ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment struct2str¿¡ ´ëÇؼ­ Á» ºÎ¿¬ ¼³¸íÀ» ÇØÁÖ½Ã±æ ºÎŹµå¸³´Ï´Ù. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): dalgong (´Þ°ø¾ÆÀú¾¾) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÈÄ 04½Ã 07ºÐ 00ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment * alita | C¿¡¼­ struct¸¦ file·Î ÀúÀåÇÏ·Á°í ÇÕ´Ï´Ù. | elementµéÀ» stringÀ¸·Î ¹Ù²ã¼­ ÀúÀåÇÏ´Â°Ô °¡Àå º¸±â°¡(--;) | ÁÁ±ä ÇÏÁö¸¸ ±¸Âú±âµµ ÇÏ°í µîµîÀÇ ÀÌÀ¯·Î struct¸¦ Åë°·Î | file·Î writeÇÏ·Á°í Çϴµ¥¿ä, [...] | gcc¸¦ »ç¿ëÇÕ´Ï´Ù. gccÀÇ °æ¿ì¿¡´Â __attribute__((packed))¸¦ º¸¼¼¿ä. protocolÀÌ ¸Ó °°Àº °æ¿ì¿¡ ÀÌ·±½ÄÀ¸·Î ¸ÂÃç¼­ ¸¹À̵é ÇÏ´õ±º¿ä. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): dalgong (´Þ°ø¾ÆÀú¾¾) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÈÄ 04½Ã 12ºÐ 16ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment terzeron´Ô²²¼­ ¾ê±âÇϽŠstruct temp{...}´Â ¾à°£ Ʋ·È½À´Ï´Ù. struct temp { char a; int b; short c; }; void main () { printf ("%d\n", sizeof (struct temp)); #define O(field) (int)(&((struct temp *)0)->field) printf ("a: %d, b: %d, c: %d\n", O(a), O(b), O(c)); } ½ÇÁ¦·Î ÀÌ°Å ½ÇÇàÇÏ¸é ±â°è¸¶´Ù ´Ù¸£°ÚÁö¸¸, º¸ÅëÀÇ 4byte word±â°è¿¡¼­´Â 12 a: 0, b: 4, c: 8 ÀÌ·¸°Ô ³ª¿ÀÁÒ. c°¡ 4byte¿¡ alignµÇ´Â°Ô ¾Æ´Ï¶ó c´Â 2byte´ÜÀ§·Î alignµÇ´Âµ¥, µÚÂÊ¿¡ paddingÀÌ ºÙÀº °ÍÀÌÁÒ. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): terzeron (the cowboy) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÈÄ 05½Ã 37ºÐ 18ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment Á¦°¡ ÀûÀº Äڵ忡 ¹®Á¦°¡ ÀÖ³ª¿ä? ½ÇÁ¦·Î ÀÛ¼ºÇؼ­ ÄÄÆÄÀÏÇÏ°í µ¹·Áº» °Çµ¥¿ä... ¹¹°¡ Ʋ·È´ÂÁö Àß ¸ð¸£°Ú½À´Ï´Ù. ^^ #include struct temp { char a; int b; short c; }; int main() { struct temp tt; printf("%d\n", sizeof(tt)); return 0; } gcc test.c && a.out 12 gcc test.c -fpack-struct && a.out 7 #pragma pack(1)À» Äڵ忡 ³ÖÀº ÈÄ¿¡ gcc test.c && a.out 7 Á¦°¡ Å×½ºÆ®ÇÑ ½Ã½ºÅÛÀº FreeBSD 4.3ÀÔ´Ï´Ù. [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): swhan (kkRunner) ³¯ Â¥ (Date): 2001³â 10¿ù 30ÀÏ È­¿äÀÏ ¿ÀÈÄ 05½Ã 43ºÐ 49ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment ±×³É '±¸°Å' Ç¥Çö¿¡ ´ëÇÑ ¾à°£ÀÇ ¿ÀÇØ·Î º¸À̴µ¥¿ä :) dalgong´ÔÀº short(2byte int)´Â 2byte´ÜÀ§·Î alignµÈ´Ù´Â Àǹ̷Π¸»¾¸ÇϽŠ°Í °°°í.. terzeron´ÔÀº À§ struct¿¡¼­ member c°¡ b´ÙÀ½ 4byte¿¡ ¸ÂÃçÁ³´Ù´Â Àǹ̷Π¸»¾¸ÇϽŠ°ÍÀ¸·Î º¸À̱¸¿ä [ CnUnix ] in KIDS ±Û ¾´ ÀÌ(By): ahsarang (.¾Æ.»ç.¶û.) ³¯ Â¥ (Date): 2001³â 10¿ù 31ÀÏ ¼ö¿äÀÏ ¿ÀÈÄ 03½Ã 00ºÐ 55ÃÊ Á¦ ¸ñ(Title): Re: [Q] C¿¡¼­ structÀÇ alignment > struct2str¿¡ ´ëÇؼ­ Á» ºÎ¿¬ ¼³¸íÀ» ÇØÁÖ½Ã±æ ºÎŹµå¸³´Ï´Ù. Á¦ »ý°¢°ú °°ÀºÁö´Â ¸ô°ÚÁö¸¸. ¾Æ·¡Ã³·³ ÇÏ´Â°Ô pack¾î¼±¸·Î °í¹ÎÇϴ°Šº¸´Ù ´õ ºü¸¥ ÇØ°áÃ¥ ¾Æ´Ò±î¿ä??? struct2strÀÌ ÀÌ ¹Ì½ÁÇÑ »ý°¢°°Àºµ¥. write/read_int4/int2/uint4/uint2/char/string µîÀÇ Â÷À̸¸ ÀÖÀ»°Å°í. @ ¾²°íº¸´Ï µÞºÏÀ̳Ü. :) struct aaa { int a; char b; }; write_aaa(int fd, const struct aaa *p) { write_int4(fd, p->a); write_char(fd, p->b); } read_aaa(int fd, struct aaa *p) { read_int4(fd, &p->a); read_char(fd, &p->a); }