gumdung   3년 전

안녕하세요.

알고리즘이 아닌 질문을 드려서 죄송합니다. 조금 헷갈리는 부분이 생겨서 여기까지 찾아오게 되었네요.

먼저 전역변수와 static 변수는 메모리 구조(스택/힙/데이터)에서 '데이터 영역'에 할당이 된다고 알고 있습니다.

또한 데이터 영역에 선언된 이 변수의 원소들은 동적을 할당이 되어져 '힙'영역에 할당이 된다고 알고 있습니다.

여기서 헷갈리는게 

변수 v,a 는 데이터 영역에 할당이 되는 것이고, v를 통한 원소들 (ex, v.push_back(1))과 a에 들어가는 값

 즉,1 과 2와 같은 원소들은 힙영역에 할당이 되게 되는 것이 맞나요?

정확하게 알지 못해서 정리가 필요함을 느껴 이렇게 질문을 드립니다.

감사합니다.

upple1   3년 전

int a와 vector<int> v는 전역으로 선언되었고 이는 data 세그먼트에 속하는 변수입니다. 

따라서  "a = 2"라는 행우는 data 영역에 할당되어있는 a의 공간에 2라는 변수를 store해주는 것입니다.

다만 vector의 경우 클래스 변수이며 내부에서 자체적으로 동적할당을 하여 힙 영역을 사용하게 됩니다.

"v.push_back(1)"이라는 행위는 v 내부에 힙 영역에서 동적할당한 공간에 1이라는 변수를 store하는 겁니다.

자세한건 vector 레퍼런스를 확인해보세요.

"또한 데이터 영역에 선언된 이 변수의 원소들은 동적을 할당이 되어져 '힙'영역에 할당이 된다고 알고 있습니다."

이 내용은 틀렸습니다.

gumdung   3년 전

친절한 답변 정말 감사드립니다. 덕분에 공부해 가네요 감사합니다 ㅎㅎ

댓글을 작성하려면 로그인해야 합니다.