int a와 vector<int> v는 전역으로 선언되었고 이는 data 세그먼트에 속하는 변수입니다.
따라서 "a = 2"라는 행우는 data 영역에 할당되어있는 a의 공간에 2라는 변수를 store해주는 것입니다.
다만 vector의 경우 클래스 변수이며 내부에서 자체적으로 동적할당을 하여 힙 영역을 사용하게 됩니다.
"v.push_back(1)"이라는 행위는 v 내부에 힙 영역에서 동적할당한 공간에 1이라는 변수를 store하는 겁니다.
자세한건 vector 레퍼런스를 확인해보세요.
"또한 데이터 영역에 선언된 이 변수의 원소들은 동적을 할당이 되어져 '힙'영역에 할당이 된다고 알고 있습니다."
이 내용은 틀렸습니다.
gumdung 3년 전
안녕하세요.
알고리즘이 아닌 질문을 드려서 죄송합니다. 조금 헷갈리는 부분이 생겨서 여기까지 찾아오게 되었네요.
먼저 전역변수와 static 변수는 메모리 구조(스택/힙/데이터)에서 '데이터 영역'에 할당이 된다고 알고 있습니다.
또한 데이터 영역에 선언된 이 변수의 원소들은 동적을 할당이 되어져 '힙'영역에 할당이 된다고 알고 있습니다.
여기서 헷갈리는게
변수 v,a 는 데이터 영역에 할당이 되는 것이고, v를 통한 원소들 (ex, v.push_back(1))과 a에 들어가는 값
즉,1 과 2와 같은 원소들은 힙영역에 할당이 되게 되는 것이 맞나요?
정확하게 알지 못해서 정리가 필요함을 느껴 이렇게 질문을 드립니다.
감사합니다.