ν°μ€ν 리 λ·°
728x90
λ°μν
CμΈμ΄λ‘ λμνλ νλ‘μΈμ€λ ν¬κ² 4κ°μ§μ λ©λͺ¨λ¦¬ μμ(text, data, heap, stack)μ ν΅ν΄ ꡬμ±λλ€. μ μ λ³μ, μ§μλ³μ λ± μ¬μ©λλ μμΉλ ν€μλ λ±μ λ°λΌ λ©λͺ¨λ¦¬ μμμ΄ λ¬λΌμ§κ² λλ€. μμ νλ‘κ·Έλ¨ λ¨μμμλ ν¬κ² μ κ²½ μ°μ§ μμλ λμ§λ§, λ€λ£¨λ μλ£κ΅¬μ‘°μ ν¬κΈ°κ° ν° κ²½μ° stack overflowμ κ°μ μ€λ₯μ μ§λ©΄ν μ μλ€. μ΄λ¬ν μ€λ₯λ₯Ό λ°©μ§νκΈ° μν΄μλ λ©λͺ¨λ¦¬ μμμ λν λͺ νν μ΄ν΄κ° νμνλ€.
Memory Layout
stack & heap
- stack
- ν¨μ νΈμΆ μ μμ±λκ³ , ν¨μ μ’ λ£ μ λ°νλλ μμμ΄λ€.
- μ¦ μ§μ λ³μ(local variable)μ΄ ν λΉλλ μμμ΄λ€.
- heap
- λμ μΌλ‘ ν λΉλλ λ³μλ₯Ό μν μμμ΄λ€.
- μλ₯Ό λ€λ©΄, malloc λλ callocμ ν΅ν΄ ν λΉλλ κ²½μ° ν΄λΉ μμμ ν λΉλλ€.
`stack`κ³Ό `heap`μ κ°μ λ©λͺ¨λ¦¬ μμμ΄μ§λ§ `heap`μ low addressμμ high addressλ‘ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νκ³ , `stack`μ μ΄μ λ°λμ΄λ€. λ§μ½ `stack`μ΄ `heap`μ μμμ μΉ¨λ²νκ² λλ©΄, `stack overflow`μ΄λ©° μ΄μ λ°λμΌ κ²½μ° `heap overflow`μ΄λ€.
data
#include <stdio.h>
/* global variable stored in in initalized data (RW) */
char c1[] = "test1...";
/* global variable stored in in initalized data (RO)*/
const char s[] = "test2...";
/* Uninitialized variable stored in BSS */
char c2;
int main()
{
/* static variable stored in initalized data */
static int i = 1;
/* Uninitialized static variable stored in BSS */
static int j;
return 0;
}
- uninitialized data (bss)
- μ΄κΈ°νλμ§ μμ μ μ, μ μ λ³μκ° ν λΉλλ μμμ΄λ€.
- λ°νμμ ν΄λΉ μμμ 0μΌλ‘ μ΄κΈ°ννλ€.
- initialized data
- μ΄κΈ°νλ μ μ, μ μ λ³μκ° ν λΉλλ μμμ΄λ€.
text
- νλ‘κ·Έλ¨ μ½λ(μμ€μ½λ), ν¨μ, μ μ μμ, λ¬Έμμ΄ λ±μ΄ ν λΉλλ μμμ΄λ€.
- μ½κΈ° μ μ© μμμ΄λ€.
File size & Time
μ€ννλ νλ‘μΈμ€μ `File size`λ `text + data` μμμ μν΄ κ²°μ λλ€. λν `run time`μ `heap`μ ν¬κΈ°μ λ°λΌ κ²°μ λλ©°, `compile time`μ `stack`μ ν¬κΈ°μ λ°λΌ κ²°μ λλ€.
Reference
- https://medium.com/@vikasv210/memory-layout-in-c-fe4dffdaeed6
- https://www.tutorialspoint.com/memory-layout-of-c-programs
- https://www.geeksforgeeks.org/memory-layout-of-c-program/
- https://stackoverflow.com/questions/3080375/how-is-the-memory-layout-of-a-c-c-program
728x90
λ°μν
'πββοΈ νλ‘κ·Έλλ° μΈμ΄ > C' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C: Signal (0) | 2021.06.11 |
---|---|
C: thread safe and reentrant (0) | 2021.01.26 |
C: Storage class specifier (0) | 2020.11.27 |
C: fork() (0) | 2020.11.25 |
C: λμ ν λΉκ³Ό νμ© (0) | 2020.11.20 |
λκΈ
κΈ λ³΄κ΄ν¨
μ΅κ·Όμ μ¬λΌμ¨ κΈ
μ΅κ·Όμ λ¬λ¦° λκΈ