为什么这个堆指针打印不同的地址?

问题描述 投票:0回答:1

如果我是正确的,两个 printf 应该显示变量具有相同的地址,因为与此同时没有任何内容被分配到堆,但它显示不同的地址。

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

void *heapTop = NULL;

int main()
{
    printf("sbrk(0):%p\n", sbrk(0));
    heapTop = sbrk(0);
    printf("heapTop: %p\n", heapTop);

    return 0;
}

输出:

sbrk(0):0x5b1033f6e000
heapTop: 0x5b1033f8f000
c memory-management heap
1个回答
0
投票

您需要在不调用

printf
或任何其他可能在堆上分配内存的函数的情况下对其进行测试。

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

void *heapTop = NULL;
void *heapTop1 = NULL;
void *sbrk(intptr_t increment); 

int main()
{

    heapTop = sbrk(0);
    heapTop1 = sbrk(0);
    printf("heapTop: %p\n", heapTop);
    printf("heapTop1: %p\n", heapTop1);

    return 0;
}

https://godbolt.org/z/zE78M1TaP

结果是一样的:

heapTop: 0x1f2d000
heapTop1: 0x1f2d000
© www.soinside.com 2019 - 2024. All rights reserved.