개발자

V8 엔진은 가상 메모리 공간 안에 힙 메모리를 생성하나요?

2023년 06월 09일조회 79

V8 엔진이 힙 메모리를 관리하는 과정을 블로그에서 찾아보니까, 힙 메모리는 V8 엔진이 관리하고 스택 메모리는 OS가 관리한다고 하던데 가상메모리는 OS 레벨에서 관리한다는 이야기도 있어서 헷갈리네요 ㅠ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

이국범님의 프로필 사진

V8에서 힙메모리 관리는 heap.cc 코드에서 수행됩니다 여기 주석을 그대로 복붙하면 아래와 같습니다 size_t requested_size = == 0 ? kMaximalCodeRangeSize : code_range_size_; // When a target requires the code range feature, we put all code objects in // a contiguous range of virtual address space, so that they can call each // other with near calls. 메모리 부족으로 할당에 실패했을 때는 아래와 같은 에러 코드를 실행합니다 V8::FatalProcessOutOfMemory(isolate_, "Failed to reserve virtual memory for CodeRange"); 결론 : V8 엔진은 가상 메모리 공간 안에 힙 메모리를 생성하나요? -> 맞습니다 출처 : https://source.chromium.org/chromium/chromium/src/+/main:v8/src/heap/heap.cc ---------- 그 외 이런 글도 있습니다. 번역하면 더 이해가 어려우니 원문으로 적습니다 Currently, an Isolate performs all allocations in the GC heap within a 4GB virtual memory "cage", which ensures that all pointers have the same upper 32-bit base address With v9.2, the default is changed such that all Isolates within a process share the same 4GB virtual memory cage 출처 : https://v8.dev/blog/v8-release-92 ---------- 여기서부터 제 의견입니다. 틀릴수도 있으니 가려서 들으세요 v8의 memory.h 소스코드 보시면 malloc으로 메모리를 할당합니다. 출처 : https://source.chromium.org/chromium/chromium/src/+/refs/heads/main:v8/src/base/platform/memory.h;drc=4efed7a716e3166adaf984f0e31cb020bfe4e7dc;l=32 malloc()을 호출하면 OS의 메모리 관리 시스템을 통해 메모리가 할당되는데 리눅스, WINDOWS, MACOS 전부 가상 메모리 기반으로 작동하므로 malloc()으로 할당된 공간도 가상 메모리 영역에 할당됩니다 즉 말씀하신 대로 가상메모리는 OS 레벨에서 관리하는 것이 맞지만 응용프로그램에서 malloc(), free()등을 호출하여 가상 메모리를 간접적으로 컨트롤할 수 있는 것입니다

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!