動的メモリ割り当てがどのように行われているかを理解しようとしています。そこで、sbrk()
システムコールを使って独自の malloc を実装することを考えました。ここでの私の質問は、動的メモリを割り当てようとすると、sbrk() と malloc() が連続していない異なるアドレスを返すことです。
これが私のコードです
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
printf("\nsbrk(0) %llu ",(unsigned long long)sbrk(0));
printf("\nmalloc(8) %llu ",(unsigned long long)malloc(8));
printf("\nmalloc(8) %llu ",(unsigned long long)malloc(8));
printf("\nsbrk(8) %llu ",(unsigned long long)sbrk(8));
printf("\nmalloc(8) %llu ",(unsigned long long)malloc(8));
printf("\nmalloc(8) %llu ",(unsigned long long)malloc(8));
printf("\n");
return 0;
}
上記のコードの出力は
sbrk(0) 30306304
malloc(8) 30306320
malloc(8) 30306352
sbrk(8) 30441472
malloc(8) 30306384
malloc(8) 30306416
sbrk(8)
連続した場所ではない理由を誰でも説明できますか。