通过系统函数分配内存sbrk/sbrk

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

int main(void) {
    printf("================brk====================\n");
    /* 以相对的方式分配内存(相对于上一次分配的结果)
     * void *sbrk (intptr_t __delta)
     * __delta 分配的内存大小,以字节为单位
     * 如果传入 4 表示分配四个字节,如果传入-4释放四个字节
     * 内存操作成功返回 调用sbrk前的堆尾指针 操作失败返回-1
     * */
    // 申请4个字节的内存
    void *p1 = sbrk(4);
    printf("%p\n", p1);
    // 获取当前堆底指针
    p1 = sbrk(0);
    printf("%p\n", p1);
    // 释放4个字节的内存
    p1 = sbrk(-4);
    printf("================brk====================\n");
    /* 以绝对的方式分配内存
     * int brk (void *__addr)
     * __addr 要将堆底指针移动到的位置
     * 例子
     *      当前堆底指针 + 4 表示要分配四个字节的内存
     *      当前堆底指针 - 4 表示要释放四个字节的内存
     * 内存操作成功返回0 操作失败返回1
     * */
    // 获取当期堆底指针
    p1 = sbrk(0);
    printf("%p\n",p1);
    // 分配4个字节的内存
    brk(p1 + 4);
    p1 = sbrk(0);
    printf("%p\n",p1);
    // 释放4个字节的内存
    brk(p1 - 4);
    p1 = sbrk(0);
    printf("%p\n",p1);

    return 0;
}

posted on 2023-02-08 17:21  信奉上帝的小和尚  阅读(28)  评论(0编辑  收藏  举报

导航