나는 이것이 어리석은 질문 인 것을 안다. 그러나 나는 잠시 동안 찾고 있었고 결정적인 대답을 찾을 수 없었다. mmap
또는 malloc
(Linux 컴퓨터의 C 언어)을 사용하면 둘 중 하나가 RAM에 공간을 할당합니까? 예를 들어 RAM이 2GB이고 사용 가능한 모든 RAM을 사용하려는 경우 malloc/memset
콤보, mmap
을 사용할 수 있습니까, 아니면 모를 다른 옵션이 있습니까?mmap 또는 malloc이 RAM을 할당합니까?
동시에 실행될 수있는 일련의 간단한 프로그램을 작성하고 프로세스에서 사용되는 모든 RAM을 사용하여 스왑이 사용되도록하고 페이지를 빈번하게 스왑/아웃합니다. 나는 아래의 프로그램으로 이것을 이미 시도했지만, 그것이 내가 원하는 것만은 아니다. 메모리 (RAM?)를 할당하고 강제 스왑을 사용합니다 (충분한 인스턴스가 실행중인 경우). 그러나 sleep
을 호출하면 메모리가 사용되지 않도록 잠글 수 없습니다 (아무 것도 실제로 스왑되거나 스왑되지 않음). 다른 프로세스?), 또는 나는 뭔가를 오해하고 있습니다.
예를 들어 3 번 실행하면 첫 번째 두 인스턴스에서 2GB (모두)의 RAM을 사용하게되고 세 번째 인스턴스는 이전 두 인스턴스 중 하나 (RAM)를 바꿔 현재 RAM에 인스턴스? 아니면 인스턴스 # 3은 디스크 또는 가상 메모리를 사용하여 실행됩니까?
또 다른 점이 있습니다. 스왑 파티션을 사용할 수 있도록 모든 사용 가능한 가상 메모리를 사용할만큼 충분한 메모리를 할당해야합니까?
마지막으로 mmap
(또는 다른 C 함수. 지옥, 해당되는 경우 다른 언어)이 작업을 수행하는 것이 더 좋을까요?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MB(size) ((size) * 1024 * 1024)
#define GB(size) ((size) * 1024 * 1024 * 1024)
int main(){
char *p;
p = (char *)malloc(MB(512));
memset(p, 'T', MB(512));
printf(".5 GB allocated...\n");
char *q;
q = (char *)malloc(MB(512));
memset(q, 'T', MB(512));
printf("1 GB allocated...\n");
printf("Sleeping...\n");
sleep(300);
}
** 편집 : 내 OS 용 CentOS 6.4 (3.6.0 커널 포함)를 사용하고 있습니다.
나는 문서에서 말한 것처럼 프로세스의 가상 주소 공간을 RAM에 잠글 수 있다고 말하는'mlock()'이나'mlockall()'을 제안 할 것이다. – Macattack
OS 의존적이지만 OS가 우선 순위를 관리하기 때문에 다른 프로그램을로드 할 때 RAM이 계속 사용된다고는 생각지 못합니다. 프로그램 실행시 RAM을 사용하게되고 나머지는 스왑으로 바뀝니다 –
여기에 설명이 있습니다. 자세한 내용을 보려면 http://stackoverflow.com/questions/2688466/why-mallocmemset-is-slower-than-calloc/2688522#2688522 [1] : http://stackoverflow.com/question/2688466/why-mallocmemset-is-calloc/2688522 # 2688522 – Alex