메모리 할당이 시스템 호출인가?
메모리 할당이 시스템 호출인가?예를 들어,malloc
그리고new
다른 프로세스에서 공유하고 OS에서 관리하는 힙입니다.개인용 더미는?힙의 메모리 할당이 OS에 의해 관리되는 경우, 이것은 얼마나 비싼가?
나는 또한 이 주제에 대해 더 많이 읽을 수 있는 장소들에 대한 링크도 갖고 싶다.
대체적으로.malloc
그리고new
호출할 때마다 시스템 호출을 수행하지 마십시오.그러나, 그들은 큰 페이지의 메모리를 할당하기 위해 하위 수준의 메커니즘을 사용한다.윈도에서는 하위 메커니즘이 있다. 나는 POSIX 시스템에서는, 이것은 어느 정도 동등하다고 믿는다. 이 두 가지 모두 OS 레벨에서 프로세스에 메모리를 할당하기 위한 시스템 호출을 수행한다.후속 배분은 시스템 호출 없이 큰 페이지 중 작은 부분을 사용할 것이다.
힙은 일반적으로 내부 프로세스이며 프로세스 간에 공유되지 않는다.만약 당신이 이것이 필요하다면, 대부분의 OS는 공유 메모리를 할당하기 위한 API를 가지고 있다.이러한 API에 대한 휴대용 래퍼는 Boost에서 사용할 수 있다.프로세스 간 라이브러리.
메모리 할당 및 OS와의 관계에 대해 자세히 알아보려면 운영 체제에 대한 좋은 책을 살펴보십시오.나는 항상 Andrew S의 현대적인 운영 체제를 제안한다.타넨바움은 읽기가 매우 쉽기 때문이다.
malloc/free 및 new/delete와 같은 메모리 할당 기능과 언어 문장은 시스템 호출이 아니다.Malloc\free는 C\C++ 라이브러리의 일부분이고 new\delete는 C++ 런타임 시스템의 일부분이다.두 사람의 통화는 때때로 시스템 통화로 이어질 수 있다.다른 언어에서 유사한 방법으로 구현된 메모리 할당.
일반적으로 메모리 관리는 메모리가 주요 시스템 리소스 중 하나이고, OS 커널에 의해 만들어진 이러한 글로벌 메모리 관리 때문에 OS를 전혀 포함하지 않고는 구현할 수 없다.그러나 시스템 호출이 상대적으로 비싸기 때문에 사람들은 시스템 호출의 양을 최소화하기 위해 언어와 메모리 할당 라이브러리를 설계하려고 한다.
내가 알기로는 힙은 프로세스 내 엔터티야.즉, 모든 메모리 할당/할당 취소 요청은 전적으로 프로세스 자체에 의해 관리된다는 것을 의미한다.운영 체제는 힙 위치 및 크기만 알고 있으며 프로세스 내 메모리 관리 시스템의 두 가지 유형의 요청을 처리한다.
add memory page at virtual address X
release memory page from virtual address X
로컬 메모리 관리 시스템은 힙의 메모리 풀에 메모리가 충분하지 않다고 판단될 때와 힙의 메모리 풀에 메모리가 너무 많다고 판단될 때 이러한 서비스를 요청한다.메모리 할당은 보통 시스템 호출의 양을 최소화하기 위해 설계되지만, 여전히 스택의 메모리 할당보다 더 비싼 주문에 머무른다.힙의 메모리 할당\배분 알고리즘이 스택의 동일한 알고리즘보다 훨씬 복잡하고 비용이 많이 들기 때문이다.
(메모리 보호 기능이 있는 운영 체제 추정).예를 들어 임베디드 장치에서는 그렇지 않을 수 있다.)
메모리 할당이 시스템 호출인가?
반드시 각각의 할당은 아니다.이 프로세스에서는 요청된 할당에 필요한 힙이 충분히 크지 않은 경우 커널을 호출해야 하지만, C 라이브러리는 커널의 경우 커널의 시스템 호출 수를 줄일 목적으로 커널을 더 큰 청크로 요청한다.
서로 다른 프로세스에서 공유하고 OS에서 관리하는 힙입니다.개인용 더미는?
힙은 프로세스 간에 공유되지 않는다.하지만 그것은 실과 실이 공유된다.
커널 메모리 할당 시스템 호출 비용이 얼마나 비싼지는 전적으로 OS에 달려 있다.그것은 아주 흔한 일이므로, 정상적인 상황에서는 효율적일 것으로 기대할 수 있다.램이 낮은 상황에서는 일이 복잡해진다.
Win32에서 계층화된 메모리 관리를 참조하십시오.
메모리 할당은 항상 시스템 호출이지만, 할당은 페이지로 이루어진다.커밋된 페이지에 사용 가능한 공간이 있는 경우, 메모리 관리자는 커널 모드를 변경하지 않고 요청된 공간을 할당한다.힙앨록의 가장 좋은 점은 가상 할당이 단일 페이지에 대한 할당을 반올림하는 할당을 세부적으로 제어할 수 있다는 점이다.그것은 기억력에 과도한 사용을 초래할 수 있다.
기본적으로 기본 힙과 개인 힙은 연결 시간 동안 기본 힙 크기가 지정된 경우를 제외하고 동일하게 처리된다.기본 힙 크기는 1MB이며 필요에 따라 커진다.
참조URL: https://stackoverflow.com/questions/6530355/is-memory-allocation-a-system-call
'programing' 카테고리의 다른 글
Vuex - 저장소 항목을 두 번 변환하거나, 새 항목을 커밋하거나, 구성 요소의 변환을 마운트할 때마다 수행하시겠습니까? (0) | 2022.05.10 |
---|---|
Quasar 프레임워크를 사용하여 Vuex 스토어 모듈 작업의 vue 라우터에 액세스하는 방법 (0) | 2022.05.10 |
vuex 페이로드가 정의되지 않음 (0) | 2022.05.10 |
Vue Js 단일 파일 템플릿에서 혼합물을 사용하는 방법? (0) | 2022.05.09 |
왜 +++++B가 작동하지 않는가? (0) | 2022.05.09 |