잡질문 많습니다 ㅠㅠ
질문1.
프로그램실행시 메모리 사이즈가 결정되는건가요?
게임을 실행시켜보면 메모리 사이즈가 점점 늘어나는걸볼수잇습니다
그과정은 이미 메모리사이즈가 결정된 프로그램에 메모리로 데이터가 올라가는 과정인가요?
질문2.
realloc 함수를통해 프로그램실행중 메모리공간이 늘어날수잇습니다
그렇기때문에? stack 영역으로 overflow가 일어나는건가요?
질문3.
혹은 stack 영역이 heap 영역으로 오버플로우가 일어나는 일은 어떤떄 발생되나요?
질문 4.
stack 영역의 끝은 어떻해 결정되는건가요? stack 영역의 범위가 지정이되야 heap stack 영역 오버플로우현상도 성립이될텐데
컴퓨터 내의 메모리용량 에의해 stack 영역끝이 결정되는건가요?
ex)
1g = 코드 데이터 힙 스택
0.25 /0.25 /0.25 /0.25
100g = 코드 데이터 힙 스택
25 / 25 / 25 / 25
질문 5.
쓸수잇는 메모리 영역의 끝이 존재한다면 프로그램 실행중 메모리 부족으로인해 프로그램이 종료되는현상은 어떻해 설명해야되나요?
쓸수잇는 메모리의 영역을 프로그램마다 나누고 그영역이 존재하지않다면 프로그램 실행자체를 못하게 하면될텐데;
질문 6.
int a=1; char b[20]="abcde";
1과 abcde 는 모두 상수형태로 "데이터 영역" 에 저장되고
그데이터를
"stack 영역" 에 할당된 a,b 변수에 대입하는건가요?
질문 7.
대입연산을 실행할때 데이터의 타입을 확인하고 같다면 대입하고 아니면 대입을 못하도록 막나요?
질문 8.
7번 질문이 맞다면 int a=1; 은 대입이 안되야되지않나요?
1은 data 영역이고 a 는 stack 영역인데
타입이 다른데 어떻해 대입이되는건가요?
질문 9.
char a[20];
a="aaa";
는 오류고
char a[20]="aaa"
는 실행되는데 두코드는 어떤차이점이있는건가요?
질문 10
컴퓨터에서 대입작업은 어떻해 실행되나요?
ex) int a=1;
char *b= "abcd"
지식도 급하게 먹으면 체합니다. 모든 걸 한번에
지식도 급하게 먹으면 체합니다.
모든 걸 한번에 알려고 하지 마시고,
기초부터 차근차근 쌓아올려 가보세요.
일단 배열 (array)과 포인터의 관계부터 착실하게....;;
지식도 급하게 먹으면 체합니다. 모든 걸 한번에
지식도 급하게 먹으면 체합니다.
모든 걸 한번에 알려고 하지 마시고,
기초부터 차근차근 쌓아올려 가보세요.
일단 배열 (array)과 포인터의 관계부터 착실하게....;;
= 연산자를 '대입'이라는 하나의 의미로만
= 연산자를 '대입'이라는 하나의 의미로만 이해하신다면 무척 곤란해집니다.
가령 haskell에서는 이런 것조차 혀용이 안됩니다.
a = 1
a = 2 -- 이미 a의 값이 1로 고정되었기 때문에 오류
b = 1.1 + 3 -- float와 int를 섞어 넣었기 때문에 오류
('그럼 도대체 어떻게 프로그래밍하라는 거냐?'
타입을 철저하게 변환시켜 가면서 functional programming 으로 해결합니다.
더 자세히 얘기하면 길어집니다.)
파이썬의 경우, 상수마저 전부 객체로 구현되는 특성 때문에
= 연산자는 대입이 아니라 '포인터의 위치를 변경'해주는 기능을 수행합니다.
a = 1 # a가 가리키는 포인터를 (int 1)이라는 객체로 변경
a = 1.2351 # a가 가리키는 포인터를 (float 1.231)이라는 객체로 변경
a = 'hello world' # a가 가리키는 포인터를 (string 'hello world')이라는 객체로 변경
원래의 질문으로 돌아가서...
그냥 =연산자를 다루는 C언어의 특성이라고 이해하시는 게 가장 빠를 겁니다.
int, long, double 사이에서는 캐스팅(타입 변환)이 일어나는 건 사실이지만,
배열과 문자열 사이에서는 변환이 저절로 이루어지지는 않지요.
C언어가 답답하고 직관적이지 않다고 느끼셨다고 해도 이상할 일은 아닙니다.
그렇게 생각한 사람들이 C언어 이후에도 다양한 프로그래밍 언어를 개발해 냈으니 말이에요.
운영체제를 수강하실 때면 위에 열거한 모든 질문이
운영체제를 수강하실 때면 위에 열거한 모든 질문이 해결됩니다.
========================================
* The truth will set you free.
댓글 달기