분명히 전역변수는 데이터 영역에 저장된다는데
밑으로 내려서 힙 설명 보면 new 로 생성한건 힙으로 들어간데
그러면 A클래스 안에있는 전역변수는 데이터 영역으로 들어간다는 소리임? 아니면 힙으로 들어간다는 소리임?
그것도 아니면 주소값은 데이터 할당된 값은 힙으로 들어간다는 소리임?
[🐣질문] 메모리 영역 설명 보면 볼수록 무슨 소리인지 모르겠음 ㅠㅠ
익명(116.126)
2024-09-19 03:00:00
추천 1
댓글 75
다른 게시글
-
알바 ^^/발아 시간 내서 쓰는 일지 몇 번째 쳐지우냐?
[20][💬] KmtR(lake6758) | 24.09.19추천 1 -
다들 추석때 열심히 개발 했지?
[2][💬] 익명(123.111) | 24.09.19추천 0 -
스압) 게임 개발 아트 기초 개념
[11][📚정보] 왕크롱이(as12i) | 24.09.19추천 11 -
공모전 나가는 목적이 홍보때문임?
[12][💬] 익명(101.235) | 24.09.19추천 0 -
배고파야 명작이 나온다
[3][💬] 익명(118.37) | 24.09.19추천 0 -
상체 하체 분리가 핵심이네
[26][💬] 211214(tomatoss) | 24.09.19추천 13 -
크몽에서 돈내고 개발 중
[5][💬] 익명(122.37) | 24.09.19추천 1 -
사운드디자인 관련 개꿀영상 공유
[13][💬] 왕크롱이(as12i) | 24.09.18추천 5 -
고도 UI 비율유지 어떻게 품?
[🐣질문] 익명(jacket3632) | 24.09.18추천 0 -
근현대전 배경 여럿이서 총질하는 턴제게임 뭐있지?
[3][💬] 익명(1.238) | 24.09.18추천 0
주소를 담는것이랑 데이터를 담는것 그차이부터 이해해버셈 - dc App
값형일때는 데이터 담는거 주소일때는 그 데이터가 어디있는지 주소값만 담는거 로 알고 있는데 어떤거 알아야함?
아 그럼 new 로 생성한 전역변수는 데이터 영역에 저장되는거임?
아 그럼 new 로 생성한 A 클래스 안 전역변수는 데이터 영역에 저장되는거임?
기억이 긴가민가한데 new 뭔가한것들은 참조타입임 일단 힙에 저 데이터가 선언되어있다는거고 참조타입에 변수에 저걸 담으면 힙에있는 해당주소가 담긴다는거일거임 니가말한 전역변수에는 new 로 뭔가했던 데이터가 담기는게 아니라 힙에데이터의 주소가 담기는거임 대략이런의미일거임 아마도 틀리면 니말이 맞음 - dc App
그럼 전역변수의 위치는 니가 말한 데이터영역이 되는거고 new 선언한데이터의 위치는 힙이되는거임 다시한번말하니만 전역변수이는 주소가 들어간거임 데이터가 아니라 그럼 20000 - dc App
그럼 인터넷 보면 나오는 데이터 영역에 저장되는 전역변수는 뭐인지 알고있음? 내가 아는 전역변수는 class A { int a; } 대충 이런느낌인데 맞는거임?
쓰는중이였네 ㅋㅋㅋ
글고 int는 그냥 값타입 변수임 값타입이랑 ,참조타입변수 구분하는 방법부터 터득하길바람 - dc App
쉽게구분하는법은 new로 생성하냐 안하냐임 - dc App
그럼 data영역은 프로그램이 종료되어야 사라진다고 하는데 전역변수 막쓰면 계속 data영역에 쌓이는거임?
뭐 그렇겠지 보통 그래서 참조타입을 많이쓰지 - dc App
참조타입은 데이터담는게 아니라 주소담으니깐 C# 쓸거면 그렇게 깊게 공부안하고 일단 사용하는걸 추천한다 - dc App
그니까 class A{int a;}이거를 인스턴트 생성하면생성된 class가 힙에 저장되는데설명글들 보면 지역변수인 int a는 data영역에 저장된다고 해서 물어보는 글임
디시 채팅 불편하네 그럼 마지막으로 한가지만 더 물어봄 여기서 말하는 프로그램이 인스턴스 생성된 class를 뜻하기도 하는건가?
엥 그건 아닐거임 이게 c++에서는 그냥 포인터 선언안하고 하면 메모리에 저장이되는형태일텐데 c# 부터는저런건 알아서 힙에 저장해줌 그리고 마지막질문은 뭔소리지 모르겠음 - dc App
그니까 클래스를 인스턴스생성할때니까 클래스를 인스턴스 생성할때 클래스 안의 지역변수인 int a를 힙에 저장해준다는 말임? 그러면 다른 설명글들의 data영역에 지역변수 저장은 어떤걸 뜻하는거임?
한글 영문 통합 6시간동안 찾아봐도 이해가 안되서 물어보는건데 진짜 미치겠다 프로그래밍 설명은 진짜 난해한듯
지금 언어 뭐쓰는데? - dc App
헐 젤 중요한걸 안써놨네 ㅠㅠㅠ c#임
하 걍 옆에서 말로 설명해주고싶다 지금 유니티 공부하려고하는거임? - dc App
유니티 공부하면서 c# 하고있지
그럼 C# 부터는 struct이랑 class가 차이가 생김 struct는 값타입 class는 참조타입이라는거임 struct 예시중에 Vector3 유니티 변수가있음 이것도 보면 float x,y,z 변수로 이루워져있음 해당 Vector3를 전역변수로 선언하면 float x,y,z 만큼 메모리를 먹음 그럼 너가 임의로 class vector3를 만들어서 x,y,z를 선언하고 이걸 new로 전역변수에 담으면 해당주소값만 전역변수에 담기고 저데이터는 힙에 담기는거임 ㅇㅋ?? - dc App
아 긍까 struct는 데이타영역에서 저장된다는거임 class는 힙에 저장되고 - dc App
그니까 임의로 클래스 벡터를 만들어서 전역 변수 xyz 선언해주고 new 사용해서 생성해주면 xyz의 주소값 data 영역에 저장 xyz의 값 힙 영역에 저장 라는 소리임?
xyz를 가지고있는 클라스주소값이 전역변수에 들가있는 거고 xyz는 힙에있는 클라스데이터영역에 같이 있는거야 - dc App
제발이해했다고 해줘라 - dc App
그럼 해당 클라스를 생성하는 클라스가 많아질수록 data영역이 부족해지는거임? 클라스 주소값은 스택에 생성되는거 아님?
나 모르겠어... 나중에 내가 생각하는거 그려서 다시 올려봐야지 ㅠㅠㅠ
기초공부하는건 좋은거임 열심히하셈 - dc App
고맙다 ㅠㅠ 아래 글에집중하느라 감사인사가 늦어졌음 ㅈㅅㅈㅅ
클래스내의 전역변수는 데이터영역으로 저장됨
그리고 new를 이용해서 동적생성한 인스턴스는 해당 전역 변수를 제외한 나머지 멤버변수 만큼 크기가 할당됨
윗댓글에서 너가 예시든 class A { int a; }; 에서의 a는 멤버변수임
너가 말하는 맥락에서의 (클래스)전역 변수라하면 class A { static int a; }; 에서의 a를 말하는거일거고. 해당 변수는 실제로 프로그램이 종료될때까지 data섹션에 할당되어져있는 메모리가 해제되지않을거임
인스턴스 생성할때 전역변수는 데이터 영역에 저장되고 빠지는거임?
아 못지우네 위에꺼 취소
아니. 프로그램이 실행되자마자 모든 클래스 전역변수들이 data 영역에 저장될거임
프로그램내의 모든 전역변수들은 .exe 파일 자체에 기록되어있고, 프로그램 로드함과 동시에 그 전역변수들은 data섹션에 로드가 됨
정적 변수랑 전역 변수 따로 부르던데 인터넷에서 찾은 메모리 설명이 잘못된걸까?
아 ㅈㅅ 정적변수로 이해하면 될듯. 전역변수는 내가 c++과 헷갈린거같고.
여튼 그럼 너가 헷갈린게 다시보니 그럼 전역 변수가 데이터영역으로 들어가냐 하면 그건 아님. 데이터영역으로 들어가는건 정적변수임
그렇구나 그럼 아마 전역 변수, static 변수, 프로그램이 종료될 때까지 지워지지 않고 컴파일 시점에 크기 할당 라는 인터넷글이 잘못되었을수가 있는거네?
다시찾아보니 c# 에서 public static 키워드를 붙여서 선언해야지만 전역변수라는데, 내가한말이 틀린건 아닌거 같네. 그 글이 잘못된듯.
그 글의 링크를 줘볼래
https://stillchobo.tistory.com/119
https://geukggom.tistory.com/205
씨샵에선 공식적으로 전역변수라는거 자체가 지원하지않는거고, 방금 내가 말한건 다른언어에서의 전역변수처럼 이용하게끔 쓸수있는방법이야
애매한게, 전역변수라는 개념은 씨샵에선 존재하지 않음. 굳이 다른 언어(예. c++)에서의 전역변수개념을 끌고와서 생각한다면 맞는 이야기임
인터넷 보면 C#에서 맴버변수를 전역변수라고 쓰는 사람들이 있던데 아예 다른거임?
인자값 = 매개변수 같은건줄 알았는데
아님. 더 정확하게 얘기하면, 멤버변수내에 인스턴스 변수(static이 안붙은 public int a;같은), 정적 변수 (static public int b;같은)로 나뉘어짐
씨샵에선 정적변수를 클래스 변수라고 부르네. 이게 더 맞는 표현일듯
멤버변수는 클래스내에 선언된 모든 변수고. 이 멤버변수를 더 분류한 것들이 위랑 같음
감사감사 일단 용어공부를 다시 복습하는게 우선이네 그뒤에 다시한번더 확인해봐야할듯 근데 위에 있는 링크 글들도 맞는거임?
전역이라는 개념이 없다는거에 저 글을 어떻게 받아들여야할지 모르겠네
전역처럼 쓸 수 있는 public static 으로 할당한 클래스 변수라는 개념에서는 맞는말이긴함. 엄밀하게 생각하자면 전역변수는 씨샵에선 없는거고, 맥락상 생각하면 클래스 변수와 동일하게 생각하고 저 글을 읽으면 될듯
ㅇㅇ1(125.244)여튼 그럼 너가 헷갈린게 다시보니 그럼 전역 변수가 데이터영역으로 들어가냐 하면 그건 아님. 데이터영역으로 들어가는건 정적변수임 여기서 정적 뿐만이 아니라 public 도 들어가는건가 그럼?
public은 접근제어자에 해당하는 내용이고 해당 상황에서 전혀 신경 안써도됨
아 그니까 public static이랑 static을 따로 말한 샘인건가?
질문을 이해못했음. 무슨 관점에서 public static이랑 static을 따로 말했다는거임?
아 너가올린 블로그 글 이야기인가?
전역변수를 public static 정적변수를 static 로 쓴거냐 물어본거임
그냥 저 글을 보지마셈. 차라리 책을보던지 그 정도 개념이면 gpt한테 알려달라고하는게 맞음.
나를 말하는거야? 아니면 저 블로그 글 쓴 사람을 말하는거야?
ㅋㅋㅋㅋ ㅇㅋㅇㅋ 감사감사 gpt 이 새끼 헛소리 존나 하던데 책 좀 찾아보겠음
이게 뉴비만난 고인물들이란걸까? 모두 침을 흘리면서 지식 소매넣기 중이네 - dc App
인붕이들 친절해..
저거어렵지..
전역변수가 static 말하는것 같은데, static 붙이면 클래스에 종속되는거라 데이터영역 저장되는거 맞음. new로 동적할당하면, static붙은거 제외한 나머지 필드들이 동적으로 힙메모리에 할당되는거고, Player p = new Player(); 특정 메서드에서 이렇게 만들면 새로 만들어진 플레이어 자체는 힙메모리에 생성된거고, p는 지역변수로 스택메모리에서 힙메모리를 바라보는 방식으로 존재한다고 생각하면댐.
https://www.udemy.com/course/fundamentals-of-operating-systems/?couponCode=ST11MT91624A
https://www.yes24.com/Product/Goods/125299750?pid=123487&cosemkid=go17107581468846387&utm_source=google_pc&utm_medium=cpc&utm_campaign=book_pc&utm_content=ys_240530_google_pc_cc_book_pc_12403%EB%8F%84%EC%84%9C&utm_term=%EC%BB%B4%ED%93%A8%ED%84%B0%EB%B0%91%EB%B0%94%EB%8B%A5%EC%9D%98%EB%B9%84%EB%B0%80&gad_source=1&gclid=Cj0KCQjw9Km3BhDjARIsAGUb4nz9o8pFVVU5UvuRUQc_M7lq_9L0T16QDEeqaLqaaL9NG-KIfEqoB4Qa
이 책이랑 강의 추천함
내가 본 글에서는 전역변수랑 static을 같이 써놨음 감사감사 개백수라서 강의는 부담스럽고 책은 도서관 찾아봐야겠네
그냥 static 은 스택 고 나머지는 힙임 struck 도 스택임