LINUX.ORG.RU

определенно есть, для "маленьких" блоков, это будет
зачастую вообще без входа в ядро.

начиная с некоторого размера лучше mmap напрямую,
но malloc() так и делает: MALLOC_MMAP_THRESHOLD_.

idle ★★★★★
()
Ответ на: комментарий от idle

>определенно есть, для "маленьких" блоков, это будет зачастую вообще без входа в ядро.

я только что провёл експеримент malloc(1): делает четыре входа в ядро.

>начиная с некоторого размера лучше mmap напрямую,

а скакого??

>но malloc() так и делает: MALLOC_MMAP_THRESHOLD_.

да но за 6 системных вызовом а mmap - 1

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

>я только что провёл експеримент malloc(1): делает четыре входа в ядро.

А второй вызов? А если небольшими кусками?

DonkeyHot ★★★★★
()
Ответ на: комментарий от cvv

1) Тебе *НИКТО* не запрещал смотреть в код mallock()

2) Ты некорректно проводишь эксперимент. Сделай 1000 malloc-ов подряд и посчитай syscall-ы.

anonymous
()
Ответ на: комментарий от DonkeyHot

>>я только что провёл експеримент malloc(1): делает четыре входа в ядро.

>А второй вызов? А если небольшими кусками?

второй действительно в ядро не полез.

cvv ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>Ты некорректно проводишь эксперимент. Сделай 1000 malloc-ов подряд и посчитай syscall-ы.

сделал.посчитал. 10 сисколов. никакой логики не вижу а хотелось бы

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

кстати а насколько отличается время выполнения malloc() от mmap()???

кто нибуть измерял???

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

Я в этих делах не силен, но рискну предположить что malloc запрашивает у системы сразу объем памяти кратный размеру страницы (4096 б), а затем ее "раздает" по мере надобности.

ukez
()
Ответ на: комментарий от ukez

В целях уменьшения фрагментации и повышения скорости работы =)

ukez
()
Ответ на: комментарий от cvv

Чтобы увидеть логику, достаточно почитать исходники? Что тут такого непонятного? Сначала mmap-ом выделяем большой кусок, потом раздираем его по мелочам, когда кончается - выделяем ещё.

anonymous
()
Ответ на: комментарий от anonymous

Дахз. у меня сорцов libc под рукой нету, а искать впадлу.

А "больше" это как ? Т.е. размер выделяемой памяти не кратен размеру страницы ? Если так, ты считайте что вы меня заинтересовали =), посмотрю на досуге

ukez
()
Ответ на: комментарий от ukez

>но рискну предположить что malloc запрашивает у системы сразу объем памяти кратный размеру страницы (4096 б), а затем ее "раздает" по мере надобности.

я тоже так думал но глубоко ошибся.

на 1000 malloc(1);

приходится 5 выделений из ядра.

тоесть память у ядра запрашивается блоками гдето по 200(256??) байт.

чё так мало не понимаю.

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

>на 1000 malloc(1);

>приходится 5 выделений из ядра.

>тоесть память у ядра запрашивается блоками гдето по 200(256??) байт.

А если учесть, что там скорее всего выравниевание по 4 байта?
То есть происишь у malloc'a 1 - а выделяет он 4?
В обще исходники надо смотреть.

Dead ★★★★
()

блин пионэры..МАТ.ЧАСТЬ - УЧИТЬ !! malloc - библиотечный вызов для динамического выделения памяти из hip`а hip - это фрагмент памяти до конца сегмента данных. если malloc не находит требуемого кусочка в hip`е то делает системный вызов brk() для увеличения сегмента данных. man malloc man brk man syscall читать книжки

anonymous
()
Ответ на: комментарий от cvv

> сделал.посчитал. 10 сисколов. никакой логики не вижу а хотелось бы

в таком случае неплохо освежить в памяти что такое треугольник Паскаля, деревья Фибоначи и им подобное ..

lg ★★
()
Ответ на: комментарий от smartly

слушайте lg (он прав) !

> в таком случае неплохо освежить в памяти что такое треугольник Паскаля, деревья Фибоначи и им подобное ..

и еще раз напомню - читайте книжки ! в malloc`е дисциплина и алгоритмы выделения памяти очень широко настраиваются.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.