2

動的メモリ割り当てがどのように行われているかを理解しようとしています。そこで、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)連続した場所ではない理由を誰でも説明できますか。

4

2 に答える 2