요?
Virtualalloc과 heapalloc은 같은 공간에 할당하는것인가?
이힝(66.249)
2016-02-17 15:36
추천 0
댓글 45
다른 게시글
-
파폭 개쓰레기 ㅅㅂ [10]ㅇㅇㅇ(121.174) | 16.02.17추천 0
-
제 상황에 맞는 파이썬 책 추천좀 [2]asdf(220.79) | 16.02.17추천 0
-
형님들 예비컴공생 수강신청 조져서 웹프로그래밍 하나 [1]익명(119.149) | 16.02.17추천 0
-
형님들놋북삿는데 머부터깔까요 [4]잉캭(1.212) | 16.02.17추천 0
-
이 것들 떼면 html , css 어느정도 할수잇는건가효?ㄹㄹㄹ(175.125) | 16.02.17추천 0
-
이런 회사 어떻냐 [4]익명(175.223) | 16.02.17추천 0
-
sh야 늙어서 그런게 슬프다면 [2]ㅁ(211.208) | 16.02.17추천 0
-
늙어서가장슬픈건 [5]sh(68.145) | 16.02.17추천 0
-
kukyakya 봐라 [4]ㅁ(211.208) | 16.02.17추천 0
-
이수노래 너무좋은듯...그사건만아니었어도 ㅂ삼철원(61.251) | 16.02.17추천 0
VirtualAlloc는 메모리 풀을 만드는 함수고 가상메모리를 할당해 예약이나 커밋할수 있게 만듬. 예약은 일종의 점유고 일반적으로 4K 기준으로 할당이 이루어짐. 이게 할당되면 다른 곳에서 메모리를 점유할 수 없게 만듬. 4K라는 단위는 컴퓨터마다 다르지만 일반적인 경우 그렇다는거. HeapAlloc는 힙을 생성하는 함수고 메모리 커밋같은 액션이 malloc처럼 자동적으로 일어남. 대용량 메모리가 필요할때 아니면 VirtualAlloc는 낭비고 쓰면 안됨.
일반적으로는 malloc를 쓰고, 단편화가 염려되면 HeapAlloc를 써. 대용량 파일을 매핑할때는 맵뷰를 쓰면 되니 VirtualAlloc는 쓸일이 거의 없음. 물론 내부적으론 힙을 생성할 때 VirtualAlloc를 호출한다. 거기까진 몰라도 되고
그래서 둘이 다른데란거임?
의외네 맵뷰>vitual이라니
젠젠 다름.
어 이해가 안되는데
맵뷰>virtual이 아니고 그만큼 쓸일이 없다는거야. 맵뷰로 해결이 가능하니깐. 더군다나 그렇게 큰 대용량 메모리를 잡아놓을 필요가 없지 않아?
쉽게 말해서 VirtualAlloc는 가상 메모리 (여기서 말하는 가상 메모리는 보호모드에서 돌아가는 메모리를 뜻함. 물리적 메모리가 램이든 하드든 어디든 그건 상관없음)를 할당하는거고 HeapAlloc는 이미 할당된 가상메모리에 힙 영역을 생성하는거.
맵뷰가 많이 쓰인다는 표현이고.. virtual alloc하면 어디에 올라감?
프로세스 메모리 외 가상메모리를 또 만든다고 생각하면 됨?
힙은 프로세스 메모리
그건 OS 마음. 적당한 곳에 올리는거지..
뭐 좀 다르지만 그렇게 이해해도 무리는 없다 생각함.
https://msdn.microsoft.com/en-us/library/ms810603.aspx
이거 참고해라
표현을 잘 못 했는데 올린다는거 무시해주셔
프로세스 영역(어플리케이션 영역) 응용프로그램이 사용하는 영역. 응용프로그램 코드가 상주한다. 스택, 힙, 코드 영역 등이 여기에 해당한다. 가상메모리, 힙 메모리 할당 등이 모두 프로세스 영역에서 이루어진다. 라는 말은 그럼 틑린말?
음 말하기 엄청 곤란하네 어떻게 설명해야하나
프로세스 영역이라는게 뭔데? 혹시 0x400000 번지부터 할당되는 통상적인 메모리 영역을 말하는거임?
유저모드
??
이게 9x 커널이면 맞는 말이 될텐데 NT커널은 안이러거든. 프로세스마다 독립적인 가상 메모리가 사용되거든?
ㅇㅇ 긇게 이해하규 있음
NT커널 기준으로 스택은 보통 0x20000번지 아래에 할당이 되고, 힙 영역은 다른곳에 할당함. 주소는 특정되지는 않는데 보통 0x400000 번지 이하로 많이 보이더라. 가상 메모리, 힙 메모리 할당 등이 모두 프로세스 영역의 "코드"에서 이루어진다는게 아니면 틀린말임 저거
별도의 가상메모리를 생성하지 않으면 프로세스 메모리 용도로 할당된 가상메모리에는 스택, 힙, 코드 영역이 포함된건 맞음. 책에 저렇게 써져있음? 겁나 햇갈리게 써져있네
책은 아니고 블로근데 그럼 같은 프로세스 코드 내에서 virtual, heap하면 해당 프로세스의 사용자영역에 생김?
블로그
http://egloos.zum.com/dstein/v/1966067
사용자 영역이라는건 애초부터 존재하지 않는다
그럼 뭔영역임? 용어가 틀린건지 개념이 틀린건지
신뢰할수 있는 책 추천좀… 인터넥에서 보니가 쉬불 헷갈리기만 한듯
"편의상" 그렇게 나누어 놓은거지. 0x400000 번지가 프로세스 시작점인 것은 통상적으로 그렇다는거고 이것도 무슨 옵션인가 켜면 달라질걸. 통상적으로 예약되지 않은 공간에 걍 OS가 만들어주는거라 생각해
그냥 빈영역 번지에 링크된다고 생각해봐. 프로세스 번지와 가상메모리 유무와는 별로 관계가 없는게, 메모리 맵도 어떤 번지로 할당되거든? 그 번지가 그리 의미있는건 아냐. 물론 공유메모리는 몇번째 번지 이후부터 할당된다, 커널은 70000000 이후 번지를 사용한다 이런 규칙은 있지만 그 외는 OS가 알아서..
어쨋든 프로세스가 할당 받은 가상메모리 내에서 일어나는일 아님? 힙도 마찬가지고 근데 virtalalloc하묜?
새로운 가상 메모리를 만들어서 프로세스 번지에 링크시키는거지
아하 ㄱㅅㄱㅅ 근데 위에 좀 드르다규 햏는데 뭐가 다른거? 답해주기도 힘들텐데 책 추천쥼…
이게 이해하기 힘들수도 있겠는데, 페이지 파일이든 메모리 맵이든 물리 주소 => 가상 메모리, 가상 메모리는 프로세스 가상 주소 공간에 매핑된다고 생각해. 프로세스 코드 내에서 heap을 하면 프로세스 힙 영역에 또다른 힙을 생성하는거고, 이 메모리는 통상적으로 0x400000 이하를 사용하니 크기가 제한적일수밖에 없음. ㅇㅋ? virtualalloc를 하면 별도의 가상 메모리가 생성되고 프로세스 가상 주소의 남는 공간에 매핑이 되는거고.
어떤게 궁금한데? 확실히 집어줘
제일 좋은 레퍼런스는 MSDN이야. 진짜 자세히 나와있으니깐. 블로그같은 곳보다 더 정확하고 자세해
ㅇㅋㅇㅋ 결론은 새 가상메모리를 만든다
뭐 좀 다르지만 그렇게 이해해도 무리는 없다 생각함.이라고 하니가 무ㅏ가 다른지 궁금했던거고 msdn은 영어니가 이해가 어려움
ㅇㅇ 그건 내 설명으로 설명이 되었으리라 생각함. msdn 영어라도 꾸준히 그냥 훑어봐. 영어 그리 어렵진 않은데 외국어니 거부감 드는거임
프로세스의 가상주소공간에 페이지영역의 상태를 변경한다는데 그럼 새로 만드는게 아닌거 아닌가요?
가상주소공간 ≠ 가상메모리
당연히 가상메모리가 주소공간에 매핑이 되면 페이지영역의 상태가 변경될수밖에 없지. Access가 없었다가 RWE가 주어지니깐
허허허
여튼 ㄱㅅㄱㅅ