【问题标题】:function wrapping in c - sbrk for tcmalloc函数包装在 c - sbrk for tcmalloc
【发布时间】:2012-01-20 22:30:19
【问题描述】:

我正在尝试将 tcmalloc 移植到 uclibc。 Tcmalloc 定义了 sbrk 函数,该函数又从 libc 调用 __sbrk。另一方面,uclibc 没有__sbrk 功能,但有sbrk。

关于如何从 tcmalloc sbrk 调用 uclibc sbrk 有什么想法吗?

【问题讨论】:

    标签: c tcmalloc uclibc


    【解决方案1】:

    sbrk 是(旧的)system call,但大多数内存分配器都是在mmap 之上构建的。另见this question

    您应该使用系统调用,而不是模拟它。我更喜欢使用mmap,而不是sbrk

    进行系统调用(通常是mmap)是从linux kernel 获取更多内存的唯一方法。

    从应用程序(或库)的角度来看,system call 是原子的(它主要是一条机器指令,如 SYSCALLSYSENTERint 0x80 等)。

    【讨论】:

    • sbrk 可能比mmap 更有用,因为后者可能无法就地增长。
    • mmap 为您提供独立的内存段。我不确定何时需要就地增长。还有MAP_GROWSDOWN,可能还有MAP_NORESERVE。另见stackoverflow.com/a/8504358/841108
    • 您可能不想为要分配的每一位内存调用mmap()。通常较小的内存请求通过sbrk() 处理,而较大的内存请求使用mmap()
    • @BasileStarynkevitch:是的,你可以使用任何你喜欢的标志mmap。另一方面,sbrk 内存映射基地址的定位方式使其在与任何其他映射冲突之前可以增长很多。
    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 2014-07-20
    • 2015-05-21
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多