0

我正在尝试malloc在 CentOS 上实现,但我不断收到错误消息:

malloc.c: In function ‘malloc’:
malloc.c:11:5: error: implicit declaration of function ‘sbrk’ [-Werror=implicit-function-declaration]
     mem_ptr = sbrk(SIXTY_FOUR_K); /* Allocate 64 kB of memory */

这是编译器警告引用的代码:

#include "malloc.h"
#include <unistd.h>

void * malloc(size_t bytes) {
    uintptr_t mem_ptr;

    if (bytes <= 0) { /* If user passes in bad value, return NULL */
        return NULL;
    }

    mem_ptr = sbrk(SIXTY_FOUR_K); /* Allocate 64 kB of memory */

    if (mem_ptr == -1) { /* sbrk() failed */
        return NULL;
    }

    return (void *)mem_ptr;
}

根据关于 的文档sbrk,您应该只需要 import unistd.h,我就是这样做的。有什么我做错了吗?

4

1 回答 1

1

你看过功能测试宏的要求了吗?

glibc 的功能测试宏要求(参见 feature_test_macros(7)):

   brk(), sbrk():
       Since glibc 2.12:
           _BSD_SOURCE || _SVID_SOURCE ||
               (_XOPEN_SOURCE >= 500 ||
                   _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
               !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
       Before glibc 2.12:
           _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

看看用类似的东西编译-D_SVID_SOURCE是否可行(尽管看起来有许多基于该宏列表的选项)

从 glibc 2.19 开始,添加了一个新的功能测试宏,_DEFAULT_SOURCE用于替换_BSD_SOURCE_SVID_SOURCE. 有关 的更多信息_DEFAULT_SOURCE,请参阅此问题:-D_DEFAULT_SOURCE 做什么?

于 2018-10-03T20:51:33.843 回答