249得票8回答
brk()系统调用是做什么用的?

根据Linux程序员手册: brk()和sbrk()改变了程序断点的位置,它定义了进程数据段的末尾。 这里的数据段是什么意思?它只是数据段或者数据、BSS和堆结合体吗? 根据维基数据段: 有时数据、BSS和堆区域被统称为“数据段”。 我不明白为什么要仅仅改变数据段的大小。如果它是数据...

37得票5回答
在malloc中,为什么要使用brk?为什么不直接使用mmap?

典型的malloc实现使用brk/sbrk作为从操作系统申请内存的主要手段。然而,它们还使用mmap来获取大块内存分配。使用brk而不是mmap是否真的有好处,还是只是传统惯例?全部使用mmap是否同样有效呢? (注意:我在这里交替使用sbrk和brk,因为它们是相同的Linux系统调用接口...

21得票4回答
Linux中的sbrk/brk是如何实现的?

我在思考Linux内核如何实现系统调用,想知道有没有人可以给我一个关于sbrk/brk的高级视图? 我已经查看了内核代码,但是太多了,我不理解。我希望有人能给我一个摘要。

18得票1回答
为什么调用sbrk(0)两次会得到不同的值?

我正在尝试理解sbrk()函数。 根据我的了解: sbrk(0)返回当前断点地址,不会增加它。 sbrk(size)将断点地址增加size字节,并返回先前的断点地址。 所以我创建了一个测试程序:#include <unistd.h> #include <stdio.h&g...

11得票1回答
关于brk/sbrk,有哪些不安全/过时的问题?

我在很多地方听说(musl邮件列表、macOS论坛等)brk()和sbrk()是不安全的。其中许多地方根本没有给出解释,或者给出非常模糊的解释。例如,此链接指出“这些函数基本上是损坏的”,并继续说malloc和sbrk子系统完全是损坏的,它们会破坏堆等。 我的问题是:为什么会这样?如果mal...

9得票5回答
程序中断是什么?它从哪里开始,0x00吗?

int brk(void *end_data_segment); void *sbrk(intptr_t increment); 使用增量为0调用sbrk()函数可以用于查找程序断点的当前位置。 什么是程序断点?它从哪里开始,0x00吗?

9得票2回答
brk和sbrk代表什么意思?

虽然我知道Unix系统调用brk和函数sbrk的作用,但我不知道它们代表什么。有人能告诉我吗?

9得票4回答
使用汇编语言 x86 中的 brk() 调用

我想动态分配堆内存,然后在这些内存地址中分配值。我知道如何分配内存,但是如何将寄存器中的值分配给第一个动态内存地址呢?以下是我的代码: push rbp mov rbp, rsp ;initialize an empy stack to create a...