반응형
메모리의 구조는 아래와 같다.
아래 0 부터 max는 메모리 주소값이며, max의 값은 OS 또는 PC에 따라 그 값이 다르다.
우리가 C언어 코드를 작성하면 그 데이터는 " text" 영역에 들어간다.
그리고 선언하는 전역변수, 즉 static 변수는 " data" 역역에 들어간다.
그리고 다음 주소에서는 heap영역이 시작되고, 젤 마지막 주소에는 stack영역으로 서로 거꾸로 데이터를 채워 나간다.
아래 코드의 주석은 코드의 진행 순서이다. 순서를 보고 메모리에 저장이 어떤식으로 작동하는지 생각해본다.
#include <stdio.h>
/*
C언어의 메모리 구조 이해.
프로그램 실행에 따른 메모리 상태 변화.
*/
int sum = 25; // 1. 전역변수 할당 => 데이터영역
void fct(int n) // 9. 다시 함수로 진입 ...
{
int num2 = 12; // 5. 지역변수 할당. => 4번 stack 그 위에.
} // 6. 함수가 종료, void이므로 4번 5번 stack 소멸.
int main() // 2. 메인함수 호출
{
int num1 = 10; // 3. 지역변수 할당 => stack 맨 아래.
fct(num1); // 4. 매개변수 할당 => stack 그 위에. (함수로 들어감)
num1++; // 7. 맨 아래 있던 stack num1이 ++연산을 함.
fct(num1); // 8. 다시 num1위에 매개변수 할당.
return 0;
}
/*
메모리 구조는
코드 영역 : 실행할 프로그램의 코드가 저장되는 메모리공간 (CPU가 이 영역의 코드를 하나씩 가져다 수행)
데이터 영역 : (중간에 소멸시킬 필요가 없는 변수를 저장) 즉, 전역변수, static변수가 할당되어 종료가 될때까지 남아있는 변수가 저장.
hip 영역 : ** 프로그래머가 원하는 시점에 메모리를 할당하고 소멸시킬 수 있는 영역. (변수의 성격을 프로그래머가 정함)
stack 영역 : (임시로 할당되어 소멸되는 영역) 즉, 지역변수, 매개변수가 할당되어 함수가 종료되면 같이 소멸되는 영역.
으로 나뉘어진다.
※ 함수 호출 순서가 main -> fct 1번째 -> fct 2번째 이루어지는데,
반환 순서는 그에 역순인, fct2 -> fct1 -> main으로 이루어 진다.
*/
메모리 구조는
코드 영역 :
실행할 프로그램의 코드가 저장되는 메모리공간 (CPU가 이 영역의 코드를 하나씩 가져다 수행)
데이터 영역 :
(중간에 소멸시킬 필요가 없는 변수를 저장) 즉, 전역변수, static변수가 할당되어 종료가 될때까지 남아있는 변수가 저장.
hip 영역 :
** 프로그래머가 원하는 시점에 메모리를 할당하고 소멸시킬 수 있는 영역. (변수의 성격을 프로그래머가 정함)
stack 영역 :
(임시로 할당되어 소멸되는 영역) 즉, 지역변수, 매개변수가 할당되어 함수가 종료되면 같이 소멸되는 영역.
으로 나뉘어진다.
※ 함수 호출 순서가 main -> fct 1번째 -> fct 2번째 이루어지는데,
반환 순서는 그에 역순인, fct2 -> fct1 -> main으로 이루어 진다.
반응형
'C언어 \ C++' 카테고리의 다른 글
[C언어] C언어 enum 사용법 (열거형 상수 선언) (0) | 2021.09.26 |
---|---|
[C언어] c언어 atoi함수, atof 함수 예제 (아스키코드 정수형 실수형 변환) (0) | 2021.09.26 |
[C언어] 2차원 오름차순 행렬 sort 정렬, C lanugae sort for array (1) | 2021.09.20 |
[C언어] 홀수 짝수 구분하여 sort시키기 예제 (랜덤수 생성, 비트연산) (0) | 2021.09.20 |
[C언어] 랜덤으로 생성한 8자리 수를 내림차순 정렬하기 예제 (0) | 2021.09.20 |