Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what is the size limit for mmap

Tags:

linux

mmap

I am using mmap() to map a shared memory object to a process. My question has two parts:

1) what is the size limit for mmap() to a linux process? (is there such limit?)

2) after the process running a while, I think the process virtual memory address space will be somehow fragmented. Will this impact the max size I can do mmap() in this process?

The linux kernel used is 2.6.27. The size of the shared memory object is around 32MB. I am trying to access what is the possibility that mmap() fails with such shared memory object due to no enough virtual address space.

like image 917
user1783732 Avatar asked Nov 04 '22 12:11

user1783732


2 Answers

There is no restriction on mmap size but would depend on the existing address space used by the given process. But it is highly suggested that you dont mmap to a large contiguous virtual address space. Another suggestion would be to use the mmap "just-in-time" when a specific physical address (or a device address) is accessed and unmap once done

like image 101
prabhakar palanivel Avatar answered Nov 10 '22 17:11

prabhakar palanivel


/proc/sys/vm/overcommit_memory controls the maximum on Linux

I have explained this in detail at: maximum memory which malloc can allocate

Basically, the value of 1 allows arbitrary virtual allocations, while 0 and 2 have more complicated limit calculations.