В нашем продукте мы используем реализацию malloc
, которая использует исключительно mmap для распределения памяти.Мы также добросовестно используем alloca
ing.Мы только что столкнулись с проблемой, когда mmap будет выделять области, которые должны быть зарезервированы для стекового пространства (таким образом, очень плохие вещи случаются, когда один из наших больших alloca разливается в область malloc'd).
Ограничением выделения нашего процесса является адресное пространство виртуальной машины, а не физическая память.Мы наблюдали за файлом / proc / * / maps, пока процесс выполнялся, и наблюдали за тем, как malloc поглощает любое доступное адресное пространство.В конечном итоге он прибегает к выделению адресов в пределах диапазона стеков, и в конечном итоге в него входит большой alloca
.
Мы попытались обойти это, alloca
ограничив весь наш стек при запуске, но это не оказалось стабильным на разных платформах (это приводит к ошибкам при попытке получить доступ к памяти alloca
d на моем устройстве 2.4 dev, в то время как оно работает на рабочей машине 2.6).
Есть ли способ на самом делезарезервировать адресное пространство?Что еще можно сделать?