지난 시간에 이어 이번엔 C의 Operators를 좀 알아보자
Operators
- Assignment ( A = B )
B쪽에 있는 걸 A에 넣는다.
- 수학기호 계산 순서는 파이썬과 같다.
#include "stdio.h"
int main(void)
{
int x = 1;
x = x + 1;
x += 1;
x++;
// 위 3개는 같다
x = x - 1;
x -= 1;
x--;
// 역시 위 3개는 같다
return 0;
}
- 그런데 x++ vs ++x는 구분을 해줘야 한다.
--> y = x++ 일 땐, 일단 y=x이고 그 이후에 x에다가 1을 더한다. ( ++기호가 뒤에 있으면 뒤 후 뒤 후 이후 이후! After! )
--> y = ++x 일 땐, x에다가 1을 더하고 그 값을 y에다가 대입한다. --> y=x
#include "stdio.h"
int main(void)
{
int x = 1;
int y;
int z;
y = x++;
z = ++y;
printf("x:%d, y:%d, z:%d\n",x,y,z);
// x=2 , y=2 , z=2
return 0;
}
---------------
좀 더 구체적으론 아래와 같다.
int x = 1;
int y;
int z;
printf("x:%d, y:%d, z:%d\n",x,y,z);
// x=1, y=16, z=0
y = x++;
printf("x:%d, y:%d, z:%d\n",x,y,z);
// x=2, y=1, z=0
z = ++y;
printf("x:%d, y:%d, z:%d\n",x,y,z);
// x=2 , y=2 , z=2
Memory in C
- Memory는 Compiler의 입장에서 보는 것이다.
- 아래가 주소가 가장 크고 ( Hexa(0~15) --> 16bit ), 제일 위에는 0이어서 제일 작다.
- Global Variable은 global data section에 저장 --> 주소값이 작은 곳(위 쪽)
- Local Variable(살아났다 죽었다 하는 친구)은 run-time stack에 저장 --> 주소값이 큰 곳(아래 쪽)
- Local Var은 죽었다 살아났다 하므로 run-time-stack 영역은 늘었다 ~ 줄었다 ~ 한다.
- Global data section에선 R4 레지스터가 Global data의 메모리 주소를 가르킨다. 그 address의 시작점을 가르킴!
--> Global data의 시작시점을 가르킴
--> 거기서 1 , 2, 3을 더하면서 몇 번째 Variable을 가져올지 정할 수 있다.(시작점을 알고 있으니)
- Local Variable의 경우
--> Run-time stack이 사용되는 가장 높은 주소를 R5(Frame Pointer, 밑바닥주소)가 가르킨다.
--> Local Var을 많이 사용하면 사용할수록 Run-time-stack 영역은 늘어나고,
그 끝나는 지점을 R6가 가르킨다.(Stack Pointer, Lower Level)
- Global data section의 밑바닥 => R4(Lower address 고정) //
Global Data를 쓰면 쓸수록 점점 주소가 증가한다(그림에서 아래방향으로)
- Run-time-stack 의 밑바닥 => R6(Lower address, 그림에서 위쪽) but! 고정은 R5(Higher address 고정, 그림에서 아래쪽)
// Local Data를 쓰면 쓸수록 점점 주소가 감소한다.(그림에서 윗방향으로)
- Heap이 뭔지, Memory사용의 구체적인 동작은 뭔지, 왜 Run-time-stack은 queue가 아닌 stack으로 다뤄야 편한지.. 그런 상세한 부분은 다~~음 시간에 계속.. To Be Continued..
- 위 예시에서 Global Var을 하나 더 선언했으면, 메모리주소의 offset이 하나 증가한 1이었을 것이다.
(Address value Increasing~~!)
'SW 만학도 > C' 카테고리의 다른 글
5. Pointer - Motivation in C (1) | 2024.03.26 |
---|---|
4. Function ic C - Grammer (1) | 2024.03.25 |
3. Control Structures in C - Condition ( While / For Loop ) (0) | 2024.03.25 |
2. Variables in C (0) | 2024.03.20 |
1. Hello C !!! Sorry for late.. (2) | 2024.03.19 |