Когда я пытаюсь выполнить приведенный ниже код, я не могу анализировать внутренние вызовы malloc api. Что я не понимаю - системный вызов mmap вызывается только один раз для 2 или более вызовов malloc . Если я назначаю более 4069 байт, он вызывает только один mmap внутри (трассировка идентифицируется с помощью strace -p processid).несколько вызовов malloc внутренне вызывают mmap только один раз
#include<stdio.h>
#include<stdlib.h>
main()
{
int *p,*q;
sleep(20);
p=malloc(5096);
printf("p=%p\n",p);
q=malloc(4096);
printf("q=%p\n",q);
sleep(2);
return 0;
}
Трассирование ВЫВОД:
[email protected]:/home/harish# strace -p 6109
Process 6109 attached
restart_syscall(<... resuming interrupted call ...>
) = 0
brk(0) = 0xeca000
brk(0xeec000) = 0xeec000
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 14), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f10b7bc7000
write(1, "p=0xeca010\n", 11) = 11
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({20, 0},
0x7ffc34a51790) = 0
write(1, "q=0xecb020\n", 11) = 11
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({2, 0}, 0x7ffc34a51790) = 0
exit_group(0) = ?
+++ exited with 0 +++
То, что я ищу это, если таНос используется более чем один раз он будет называть более одного ММАП, поскольку память превышает в двух таНос х за 4096
Это просто способ реализации «malloc». Вы должны изучить исходный код 'malloc', чтобы понять, как он реализован. –
Где я могу увидеть основной код malloc .please, дайте мне путь для прохождения через – torban
Я просто искал «исходный код malloc» и вижу несколько хороших результатов. Что вы пробовали? – Useless