Skip to main content
  1. Posts/
  2. Today I Learned/

CSAPP 3.9 Heterogeneous Data Structures

·421 words·2 mins
Jiho Kim
Author
Jiho Kim
๋‹ฌ๋ ค ๋˜ ๋‹ฌ๋ ค

๐Ÿ“ ์ƒ์„ธ ์ •๋ฆฌ
#

  • C๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๊ฐ์ฒด๋ฅผ ๊ฒฐํ•ฉํ•ด์„œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋‘๊ฐ€์ง€ ์–ด์ฉŒ๊ตฌ..
    • struct, union
  • 3.9.1 Structures
    • ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๊ฐ์ฒด๋ฅผ ๋‹จ์ผ ๊ฐ์ฒด๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•
    • structure ๋‚ด์˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋Š” ์ด๋ฆ„์œผ๋กœ ์ฐธ์กฐ๋จ
    • ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ฐ์† ์˜์—ญ์— ์ €์žฅ๋˜๊ณ , structure์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์ฒซ๋ฒˆ์งธ ๋ฐ”์ดํŠธ์˜ ์ฃผ์†Œ
      • Array๋ž‘ ๋น„์Šทํ•˜๋‹ค!
    • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฐ ํ•„๋“œ์˜ ๋ฐ”์ดํŠธ ์˜คํ”„์…‹์„ ๋“ค๊ณ ์žˆ๊ณ .. ๊ทธ๊ฑธ๋กœ ์ž˜ ์™”๋‹ค๊ฐ”๋‹ค ์ฐธ์กฐ
  • 3.9.2 Unions
    • ๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ์œ ํ˜•์— ๋”ฐ๋ผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
      • ์ด๊ฒŒ ๋ฌด์Šจ์†Œ๋ฆฌ์ง€?
    • struct์—์„œ char, int[2], double์ด ์žˆ๋‹ค๋ฉด
      • char: 01, int: 412, double: 16~24๋ฐ”์ดํŠธ๋กœ ์ด 24๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
        • ์‚ฌ์ด๊ณต๊ฐ„์€ ํŒจ๋”ฉ
    • Union์ด์—ˆ๋‹ค๋ฉด ๊ฐ€์žฅ ํฐ๊ฒƒ์— ๋งž์ถฐ์„œ ๊ทธ์ € 8๋ฐ”์ดํŠธ ์‚ฌ์šฉ
      • ๊ทธ๋•Œ๊ทธ๋•Œ char / int / double๋กœ ์ฝ๋Š” ๊ฒƒ
        • ๊ทผ๋ฐ ๊ทธ๋Ÿผ ์ด๊ฑธ ์™œ์“ฐ๋ƒ?
    • ํ•œ๋ฒˆ์— char / int / double ์ค‘ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋™์‹œ์— ๊ฐ€์ง€์ง€ ์•Š์„๋–„!
      • ์ฑ…์— ๋‚˜์˜จ ์˜ˆ์ œ๋Š” ๋ฆฌํ”„๋…ธ๋“œ์—๋งŒ ๊ฐ’์ด ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ฒด
        • ์™ผ์ชฝ๋…ธ๋“œ ํฌ์ธํ„ฐ, ์˜ค๋ฅธ์ชฝ๋…ธ๋“œ ํฌ์ธํ„ฐ, double 2๊ฐœ๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•ด๋ณด์ž
          • struct๋Š” 32๋ฐ”์ดํŠธ, Union์ด๋ผ๋ฉด ์ž˜ ๋ฌถ์–ด์„œ 16๋ฐ”์ดํŠธ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    • ๋‹ค์Œ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.
      • double uu2double(unsigned word0, unsigned word1)
          {
          	union {
          	  double d;
          	  unsigned u[2];
          	} temp;
          	temp.u[0] = word0;
          	temp.u[1] = word1;
          	return temp.d;
          }
        • ์ด๋•Œ word0 = 0x12345678, word1 = 0x9abcdef0 ์ด๋ผ๊ณ  ํ•˜๋ฉด
        • temp์—๋Š”
          • Little Endian์ผ๋•Œ 78 56 34 12 f0 de bc 9a
          • Big Endian์ผ๋• 12 34 56 78 9a bc de f0
          • ๊ฐ€ ์ €์žฅ๋œ๋‹ค.
        • ์ด๋ฅผ d๋กœ ์ฝ์„ ๋•Œ
          • Little Endian์—์„œ๋Š” 0x9abcdef012345678
          • Big Endian์—์„œ๋Š” 0x123456789abcdef0
          • ์œผ๋กœ ํ•ด์„ํ•˜๊ฒŒ ๋œ๋‹ค. (d๋ฅผ ์ฝ์„๋•Œ๋„ endian ์‹ ๊ฒฝ์ฝํ•˜๋‹ˆ๊นŒ!!)
  • 3.9.3 Data Alignment
    • ์ผ๋ถ€ ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ์ฃผ์†Œ๋Š” 2, 4, 8๋“ฑ์˜ ๋ฐฐ์ˆ˜์—ฌ์•ผํ•จ์„ ์š”๊ตฌํ•˜๋Š” ์• ๋“ค์ด ์žˆ๋‹ค
      • ์ด๋ž˜์•ผ ํ•˜๋“œ์›จ์–ด ์„ค๊ณ„๊ฐ€ ๋‹จ์ˆœํ™”๋œ๋‹ค
      • 8์˜ ๋ฐฐ์ˆ˜๋กœ ์ •๋ ฌ๋˜์–ด์žˆ์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ•œ๋ฒˆ๋งŒ ์ฐธ์กฐํ•˜๋ฉด ๋˜์ง€๋งŒ, ์•„๋‹ˆ๋ผ๋ฉด ์•ž๋’ค๋กœ ๋ถ„ํ• ๋˜์–ด ์žˆ๋Š”๊ณณ์— ๋‘๋ฒˆ ์ฐธ์กฐํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ์Œ
    • x86-64๋Š” ๋ฐ์ดํ„ฐ์˜ ์ •๋ ฌ์— ๊ด€๊ณ„์—†์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ, ์ธํ…”์€ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ •๋ ฌํ• ๊ฒƒ์„ ๊ถŒ๊ณ ํ•˜๊ณ  ์žˆ์Œ
    • ์ •๋ ฌ ๊ถŒ์žฅ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค
      • K = 1 : char
      • K = 2 : short
      • K = 4 : int, float
      • K = 8 : long, double, char *
    • ์•„ํ•˜, ์ด๊ฒŒ bool ์ •์  ๋ฐฐ์—ด๋ณด๋‹ค bitset์ด ๋น ๋ฅธ ์ด์œ ๊ตฌ๋‚˜!! ์•Œ์•„์„œ SIMD๋ฅผ ์ง€์›ํ•˜๋ฉด์„œ ์ฑ„์›Œ์ฃผ๋Š”๊ฑฐ๊ตฌ๋‚˜!!
      • ๊ทธ๋ฆฌ๊ณ  ์ด๊ฑธ ํŒจ๋”ฉ์ด๋ผ๊ณ  ํ•˜๊ฒ ๊ตฌ๋‚˜!
    • .align 8
      • ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด, ๊ทธ ๋’ค๋”ฐ๋ฅด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ 8์˜ ๋ฐฐ์ˆ˜์œ ์ฃผ์†Œ๋กœ ์‹œ์ž‘๋  ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค.
    •   struct S1 {
            int i;
            char c;
            int j;
        }
      • ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, 4 / 1 / 4 ๋ฐ”์ดํŠธ๋ฅผ ์“ฐ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ 4 / 1 + 3(ํŒจ๋”ฉ) / 4 ๋ฐ”์ดํŠธ๋ฅผ ์“ด๋‹ค.
        • ๊ฒฐ๊ณผ์ ์œผ๋กœ j๋Š” ์˜คํ”„์…‹ 8์„ ๊ฐ€์ง€๋ฉฐ ์ „์ฒด ๊ตฌ์กฐ ํฌ๊ธฐ๋Š” 12๋ฐ”์ดํŠธ์ด๋‹ค.
      • ๋˜ํ•œ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” S1 ์œ ํ˜•์˜ ํฌ์ธํ„ฐ p๊ฐ€ 4๋ฐ”์ดํŠธ ์ •๋ ฌ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.

โ”์งˆ๋ฌธ ์‚ฌํ•ญ
#

  • ์ผ๋ถ€ ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ์ฃผ์†Œ๋Š” 2, 4, 8๋“ฑ์˜ ๋ฐฐ์ˆ˜์—ฌ์•ผํ•จ์„ ์š”๊ตฌํ•˜๋Š” ์• ๋“ค์ด ์žˆ๊ณ , ์ด๋ž˜์•ผ ํ•˜๋“œ์›จ์–ด ์„ค๊ณ„๊ฐ€ ๋‹จ์ˆœํ™”๋œ๋‹ค
    • ํ•˜๋“œ์›จ์–ด ์„ค๊ณ„๊ฐ€ ๋‹จ์ˆœํ™”๋œ๋‹ค๋Š”๊ฑด ๋ญ˜๊นŒ?
  • ๋˜ํ•œ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” S1 ์œ ํ˜•์˜ ํฌ์ธํ„ฐ p๊ฐ€ 4๋ฐ”์ดํŠธ ์ •๋ ฌ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.
    • ์•ˆ์— ์žˆ๋Š” ์›์†Œ๋“ค ์ค‘ K์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋‚˜?

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ
#

  • CSAPP