2

Cでメモリがどのように機能するかを理解しようとしているので、sbrk現在関数を試しています。sbrk(0)現在のプログラム ブレーク、つまりデータ セグメントの末尾を返す必要があることはわかっています。

そのため、複数回呼び出しを試みましたがsbrk(0)、何らかの理由で最初の値が他の値とは異なります。たとえば、このプログラム

#include <stdio.h>
#include <unistd.h>

int main()
{
        void * currpb = sbrk(0);
        printf("The current program break is: %p.\n", currpb);

        void * newpb = sbrk(0);
        printf("The current program break is: %p.\n", newpb);

        void *new2pb = sbrk(0);
        printf("The current program break is: %p.\n", new2pb);

        void *new3pb = sbrk(0);
        printf("The current program break is: %p.\n", new3pb);
}

次の出力を教えてください。

The current program break is: 0x18b0000.
The current program break is: 0x18d1000.
The current program break is: 0x18d1000.
The current program break is: 0x18d1000.

最初の値が他の 3 つの値と異なる理由がわかりません。何かアイデアはありますか?

4

1 に答える 1