변수나 상수가 쓰는 메모리가 면이 좀궁금해요
새길
질문 내용 :
정적인 변수나 상수를 사용하게되면 스택에 쌓인다고하자나요
예를 들면 int a= 4+3 이라면 4도 3도 메모리상에 올라가고 시피유를 통해 연산을 거쳐서 a라는 변수에 저장된다고 알고있는데
이과정이 차례로 스텍에 쌓이는것 아닌가요? 그렇다면
스텍이 풀릴려면 { 스코프를 넘어야 풀리지않나요? 계속쌓이는 건지. 아니면 그 상수있는 라인이지나면 없어지는건지
지식이 부족하다보니까 궁금합니다. 알려주세요
-
꽃여름
감사합니다 꼭 그냥 상수들은 어디로가는가 궁금햇는데
조금이나마 해소된거같아 감사드립니다 -
자랑
int a=4+3;
을 하게 되면
컴파일러가
int a=7;
바꾸게 됩니다.
int a;라고 변수를 선언했으므로
auto int a;가 됩니다.
특별히 메모리에 들어갈 필요가 있으면, 스택에 들어가게 되고
그렇지 않을 경우에는 레지스터를 사용하게 됩니다. -
가을
그러니까 ㅠ static이 붙지고
컴파일타임에 메모리크기들이 다 정해지는거염.
예를 들면 한라인이 int a= 4+3; 이라면 a에 7을 저장하기위해 4와 3이 메모리에 올라와따가 7이 연산되고 대입된다는데 4와 3도 메모리에 올라오니까 스택에 쌓인다고 생각하는데 스텍은 {안을 벗어나야 풀리잔아요 너무 비효율적인데 그러지는 안게 설계햇을꺼라 생각하는데
궁금해요 4와 3은 어떻게되는지 -
가이
제가 정적 이라는 말을 써서 좀 의미전달이 잘못된거같은데 ㅠ
그냥 단순한 상수를 말하고싶엇어요 ㅠ
로드되는 시점에 생성되는건 글로벌한 변수가 아닌가요 같은가요?? -
알렉산더
아마도, 함수 내부에서 선언된 정적 변수나 상수 등은 프로그램이 로드될 때 메모리에 배치될 것입니다.
다시 얘기하면, 함수가 실행되는 시점이라기 보다는, (함수의)실행 코드가 메모리에 로드되는 시점에 변수가 생성된다고 생각됩니다.