IT Dictionary

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

Jaebins 2023. 4. 28. 12:56
๋ฐ˜์‘ํ˜•

๐Ÿ˜ž ์„œ๋ก 

Visual Studio Code๋ฅผ ํ‚ค๊ณ  ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ• ๋ ค๊ณ  ํ•˜๋‹ค๊ฐ€, ๋ฌธ๋“ ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒผ๋‹ค. ์šฐ๋ฆฌ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๊ฒŒ ๋’ค์—์„œ ์—ด์‹ฌํžˆ ์ผํ•ด์ฃผ๊ณ  ์žˆ๋Š” ์ปดํ“จํ„ฐ์˜ ๋ชจ์Šต์ด ๋ง์ด๋‹ค...

 

์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์„๋•Œ๋Š” ์ผ์ผํžˆ ์ปดํ“จํ„ฐ์—๊ฒŒ ํž˜๋“ค๊ฒŒ ์ด์ง„๋ฒ•์œผ๋กœ ๋”ฐ๋กœ ๋ช…๋ น์„ ํ•˜์ง€ ์•Š์•„๋„ ๋งˆ์šฐ์Šค๋กœ ์‹คํ–‰์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋”๋ธ” ํด๋ฆญ ํ•˜๋ฉด ์ปดํ“จํ„ฐ๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•„๋“ค์–ด ์ฆ‰์‹œ ํ”„๋กœ๊ทธ๋žจ์„ ๋‚˜์˜ ๋ชจ๋‹ˆํ„ฐ์— ๋„์›Œ์ค€๋‹ค. ๋„ˆ๋ฌด ์‹ ๊ธฐํ•œ ๊ฑฐ ๊ฐ™๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ์ด ๋ฉ”๋ชจ๋ฆฌ ๋ผ๋Š”๋ถ„์— ๋Œ€ํ•ด์„œ ์ข€ ๊ณต๋ถ€ํ•ด๋ณผ๋ ค๊ณ  ํ•œ๋‹ค.

 

โ›ณ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

 

๋‹ค์Œ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ 4๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

 

๐Ÿ‘‰ ํ…์ŠคํŠธ(Text) ์˜์—ญ ๐Ÿ‘‰ ๋ฐ์ดํ„ฐ(Data) ์˜์—ญ ๐Ÿ‘‰ ์Šคํƒ(Stack) ์˜์—ญ ๐Ÿ‘‰ ํž™(Heap) ์˜์—ญ

 

โ›ณFrist, ์ฝ”๋“œ(Code) ์˜์—ญ or ํ…์ŠคํŠธ(Text) ์˜์—ญ

์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ํ•˜๊ฒŒ ๋  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋  ์˜์—ญ์ด๋‹ค. CPU๋Š” ์ฝ”๋“œ ์˜์—ญ์— ์ €์žฅ๋œ ๋ช…๋ น์–ด๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ฉด์„œ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ผœ์ค€๋‹ค. 

 

โ›ณSecond, ๋ฐ์ดํ„ฐ(Data) ์˜์—ญ

์ „์—ญ ๋ณ€์ˆ˜, ์ •์  ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ์ข…๋ฃŒ์™€ ํ•จ๊ป˜ ์†Œ๋ฉธ๋œ๋‹ค. ๋ฐ์ดํ„ฐ ์˜์—ญ์€ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

(1) Initialized Data Segment(์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ์˜์—ญ) : ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น์ด ๋œ ๋ณ€์ˆ˜
(2) Uninitialized Data Segment(์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ์˜์—ญ) : ์„ ์–ธ๋งŒ ๋œ ๋ณ€์ˆ˜

 

์—ฌ๊ธฐ์„œ (2)๋ฒˆ์„ BBS(Block started By Symbol)๋กœ ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

 

โ›ณThird, ์Šคํƒ(Stack) ์˜์—ญ

ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋งค๊ฐœ ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์˜์—ญ์ด๊ณ , ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๊ณ , ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ์™€ ํ•จ๊ป˜ ์†Œ๋ฉธ๋œ๋‹ค. ๋˜ํ•œ ์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„๋†“๊ณ  ์‹คํ–‰๋˜๋Š” ๊ณต๊ฐ„์„ ์Šคํƒ ํ”„๋ ˆ์ž„(Stack Frame)์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์Šคํƒ์€ LIFO(Last-Input First-Out) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ž…๋ ฅ๋œ ๊ฐ’์ด ๊ฐ€์žฅ ๋จผ์ € ์ถœ๋ ฅ๋œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.


๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ๋†’์€ ๊ณณ์—์„œ ๋‚ฎ์€ ๊ณณ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น์ด ๋œ๋‹ค. 

์—ฌ๊ธฐ์„œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋‚ฎ๋‹ค, ๋†’๋‹ค๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ๋œป์€ ๋ง ๊ทธ๋Œ€๋กœ ์ฃผ์†Œ๊ฐ’์ด ๋‚ฎ๋‹ค ๋†’๋‹ค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์‹ค ์ด์ชฝ ๋ถ€๋ถ„์€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์—...๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค..

 

โ›ณFourth, ํž™(Heap) ์˜์—ญ

์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด C์–ธ์–ด์—์„œ ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๊ทธ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์‚ฌ์ „์— ๋ฏธ๋ฆฌ ์ •์˜ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•  ๊ฒƒ์ด๋‹ค.

 

ํž™ ์˜์—ญ์€ ๋‚ฎ์€ ์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ๋กœ ํ• ๋‹น์ด ๋˜๊ณ , ๋ฐ์ดํ„ฐ ์˜์—ญ๊ณผ ์Šคํƒ ์˜์—ญ์€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋˜์ง€๋งŒ ํž™ ์˜์—ญ์€ ๋Ÿฐํƒ€์ž„์— ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋™์  ํ• ๋‹น์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๋Ÿฐํƒ€์ž„์€ ์ปดํŒŒ์ผ์ด ๋๋‚˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ์„ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿ… ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์šด์˜์ฒด์ œ๋Š” 32๋น„ํŠธ์™€ 64๋น„ํŠธ๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋‹จ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

32๋น„ํŠธ๋Š” 0000 0000 0000 0000 0000 0000 0000 0000 ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด 32๋น„ํŠธ์—์„œ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋‹จ์œ„์— ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 2³² ์ด๋‹ค. ๋˜ํ•œ ํ•˜๋‚˜์˜ ์ฃผ์†Œ๊ฐ€ 32๋น„ํŠธ ์ด๋ฏ€๋กœ 4byte์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ , 1byte์˜ ํฌ๊ธฐ๋ฅผ 4,294,967,296 ๊ฐœ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” 4GB๋ฅผ ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋œ๋‹ค.

64๋น„ํŠธ์—์„œ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋‹จ์œ„์— ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋ฌด๋ ค 2โถโด ์ด ๋œ๋‹ค. ์ด๋Š” 8byte์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ 18,446,744,073,709,551,616 ๊ฐœ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌ ํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” 16EB์ด๋‹ค. ๋‹น์žฅ ๋‹จ์œ„๋งŒ ๋ด๋„ ์—„์ฒญ๋‚œ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค...

 

๋ณดํ†ต์€ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ๊ท€์ฐฎ๊ณ  ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— 16์ง„์ˆ˜๋กœ ์น˜ํ™˜์‹œํ‚จ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ

 

๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ์— ์˜ฌ๋ ค๋†จ๋˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ฝ”๋“œ ์˜์—ญ์ด ๊ฐ€์žฅ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋‚ฎ๊ณ , ๋ฐ์ดํ„ฐ ์˜์—ญ (์ดˆ๊ธฐํ™”๊ฐ€ ๋œ ๋ณ€์ˆ˜๋“ค์ด ๊ฐ€์žฅ ๋จผ์ € ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๊ณ , ๊ทธ ๋‹ค์Œ์œผ๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์˜ฌ๋ ค์ง„๋‹ค.) , ํž™ ์˜์—ญ, ์Šคํƒ ์˜์—ญ ์ˆœ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์ง€์ •์ด ๋œ๋‹ค.

 

ํ•œ๋ฒˆ ์‹ค์ „์œผ๋กœ ๊ฐ€๋ณด์ž.

#include <stdio.h>

int main() {
  int a = 25;
  printf("%p", &a);
  return 0;
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€์ˆ˜ a์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  a์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค๋ฉด

๊ฒฐ๊ณผ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋œ๋‹ค. ํ•ด๋‹น a๋ฅผ 2์ง„๋ฒ•์œผ๋กœ ํ•˜๋ฉด 0001 1001๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฌํ•œ 2์ง„๋ฒ•์ด ์œ„์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ์ €์žฅ์ด ๋˜์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ํ•œ์นธ์˜ ํฌ๊ธฐ๋Š” 1byte์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ถœ๋ ฅํ•˜๋Š” a๋Š” int ๋ผ๋Š” ์ž๋ฃŒํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ 4byte๋ฅผ ๊ฐ€์ง€๊ณ , ๊ทธ๋ž˜์„œ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์—์„œ ์ด 4์นธ์˜ ํฌ๊ธฐ๋ฅผ ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค.

 

0x7ffe4522f378 - 0001 1001
0x7ffe4522f379 - 0000 0000
0x7ffe4522f380 - 0000 0000
0x7ffe4522f381 - 0000 0000

 

์‹ค์งˆ์ ์œผ๋กœ a๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ์ €์žฅ์ด ๋˜์žˆ๋Š” ๊ฒƒ์ด๋‹ค. (์‹คํ–‰ ํ™˜๊ฒฝ์ด 64๋น„ํŠธ๋กœ ๊ณผ์ •ํ–ˆ์„ ๋•Œ, 7 ์•ž์— ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ 0๋“ค์€ ๋ชจ๋‘ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.)

๋ฐ˜์‘ํ˜•