c - 了解 C malloc 和 sbrk()

标签 c pointers malloc

我试图了解 C 中 malloc 和 sbrk 之间的区别以及它们之间的关系。据我了解,malloc 和 sbrk 几乎是同一回事,但我读到 malloc 在分配内存时使用 sbrk。这真的很令人困惑,谁能给我解释一下?

例如,在这个程序中,malloc 是否调用了 sbrk?如果是这样,它是否会在每次被调用时简单地调用 sbrk,所以对于这个例子是 10 次?

int main(int argc, char **argv) {
        int i;
        void *start_pos, *finish_pos;
        void *res[10];
        start_pos = sbrk(0);
        for (i = 0; i < 10; i++) {
                res[i] = malloc(10);
        }
        finish_pos = sbrk(0);
        return 0;
}

谢谢,

最佳答案

sbrk 从操作系统请求更多内存。这是一个非常低级的功能,不是很灵活。

malloc 使用 sbrk,但更灵活。通常,malloc 会向 sbrk 请求大块内存,然后分发这些大块的一部分。因此,大多数对 malloc 的调用将不会导致对 sbrk 的调用。

关于c - 了解 C malloc 和 sbrk(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8484863/

相关文章:

c - Bool *X,这是什么数据类型?

使用 open() 写入之前清除文件

c - 全局数组失去值(value)

c - 为什么在 C 中使用指针定义时,我们将 `const` 用于字符串?

c - 为什么我的指针数组在动态分配后被覆盖?

CUDA代码问题

在 C 测试套件中调用 Swift 代码

c - 修改通过引用传递的指针

c++ - 尝试处理嵌套对象/结构和动态数组时发生内存泄漏或内存错误。可能的 Xcode/malloc 问题

c - 将控制信息与分配的内存一起存储。它是可移植的吗?