cost 104 ms
为什么用户进程负责从操作系统请求内存? - Why are user processes responsible for requesting memory from the OS?

堆分配器负责主动向操作系统请求内存以增加堆,例如使用brk或mmap 。 访问未分配的内存会导致段错误。 我可以设计一个不同的操作系统用户界面,用户可以在其 64 位地址空间中的任何位置自由读/写(除了包含 .text 的可执行不可写页面和内核保留部分),以及对未分配的任何读/写内存会像现在一样出 ...

我可以强制 sbrk 返回地址在某个特定范围内吗? - Can I enforce sbrk return address to be within a certain specific range?

我想确保sbrk的返回地址在某个特定范围内。 我在某处读到sbrk从程序初始化时分配的区域分配。 所以我想知道是否有办法强制程序初始化从特定地址分配? 例如,使用mmap ,我将能够使用MAP_FIXED_NOREPLACE这样做。 有没有可能有类似的东西? ...

malloc 会四舍五入到最接近的页面大小吗? - Will malloc round up to the nearest page size?

我不确定我在这里问的是不是菜鸟问题,但我在这里 go。我也搜索了很多类似的问题,但我一无所获。 所以,我知道mmap和brk是如何工作的,而且无论您输入的长度是多少,它都会将其四舍五入到最近的页面边界。 我也知道malloc使用brk / sbrk或mmap (至少在 Linux/Unix 系统上 ...

自己的 Malloc 实现冻结在 brk - Own Malloc implementation freeze at brk

为了练习,我目前正在尝试在 c 中编写自己的 malloc function。 所以我的问题是,在从堆中进行一些分配后,我的程序将冻结。 我找到了导致冻结的代码段,当我调用 brk sys 调用时它会冻结。 我已经尝试在那里解锁我的互斥锁,但这没有用。 为了测试它,我编写了一个永久循环并在一个数组 ...

需要在 2 的幂上对齐内存并在 C 中的 2 * getpagesize() 的倍数上对齐程序中断 - Need to align memory on a power of 2 and align the program break on a multiple of 2 * getpagesize() in C

我正在使用 brk、sbrk 和 getpagesize() 重新编码 malloc 函数 我必须遵守两条规则: 1) 我必须在 2 的幂上对齐我的记忆 这意味着:如果调用 malloc 是: malloc(9); 我必须向他们返回一个 16 字节的块。 (最接近的 2 次方); 2)我必 ...

为什么 brk(void *end_data_segment) 的参数不向上舍入到下一页边界? - Why isn't argument of brk(void *end_data_segment), rounded up to the next page boundary?

从Linux 编程接口: brk()系统调用将程序中断设置到end_data_segment指定的位置。 由于虚拟内存是以页为单位分配的,因此end_data_segment有效地向上舍入到下一页边界。 所以对于这个演示: 输出: My page size: 4096 progra ...

2020-01-14 08:25:50   1   47    c / linux / brk  
Linux:brk() 错误“无法分配内存” - Linux: brk() error 'Cannot allocate memory'

我正在尝试在 C 程序中使用 brk() function。 我的目标是通过检查当前程序中断(pb)来直接使用它(作为更大测试的一部分) 执行 malloc (用于测试 malloc 如果分配的空间足够大,有时应该执行 brk) 而不是通过使用当前地址+增量直接执行 brk() (并检查这是否增加 ...

在 malloc 中,为什么要使用 brk? 为什么不直接使用 mmap? - In malloc, why use brk at all? Why not just use mmap?

malloc的典型实现使用brk / sbrk作为从操作系统申请内存的主要方式。 然而,他们也使用mmap来获取大分配的块。 使用brk而不是mmap真的有好处,还是只是传统? 使用mmap来完成这一切不是同样有效吗? (注意:我在这里互换使用sbrk和brk因为它们是同一个 Linux 系统 ...

关于brk / sbrk有什么不安全/遗产? - What's unsafe/legacy about brk/sbrk?

我听说很多地方(musl邮件列表,macOS论坛等) brk()和sbrk()都不安全。 其中许多地方要么根本不作解释,要么给出非常含糊的解释。 例如, 这个链接指出“这些函数从根本上被打破”,并继续说malloc和sbrk子系统完全被破坏,它们毁了堆,等等。 我的问题是:为什么会这样 ...

为什么调用 sbrk(0) 两次会给出不同的值? - Why does calling sbrk(0) twice give a different value?

我试图理解sbrk()函数。 据我所知: sbrk(0)返回中断的当前地址并且不增加它。 sbrk(size)将中断的地址增加size字节并返回中断的前一个地址。 所以我创建了一些东西来测试它: 所以我期待看到这样的结果: 但相反,我得到了这个: 为什么sbrk(0)的前两次调用 ...

内存中的程序中断是什么? - What is the program break in memory?

我正在阅读一篇关于为指针分配空间的文章,该文章没有确切说明程序中断是什么,但提到了它。我需要知道程序中断是什么。如果我用 malloc 创建一个指向内存空间的指针..IE PROGRAM BREAK是开始还是结束? 是 p[0] 还是 p[99] THX 的地址 ...

2018-02-11 22:03:08   1   463    c / sbrk / brk  
Bash()上的Bash脚本段错误 - Bash script segfaults on brk()

有人可以解释为什么这种“无休止”的循环段快速出现吗? 例如,假设我们具有以下功能: 8到10秒后,此段错误。 通过strace进行检查,我们可以看到很多brk()调用: 我的问题是: 这是segfaulting,因为它试图访问内存空间中的未映射区域(通过brk)? ...

将sbrk分成2 - splitting an sbrk into 2

要重新编码malloc函数,我做一个sbrk(stack) ,其中: 我的malloc总是超出我的需要,然后我要取一些这个分配的大小size区域并返回它,如果我想在分配了内存后再执行另一个malloc,那么我就不必多次调用sbrk了。 我该怎么做,我尝试返回brk(start_of_t ...

无法更改堆大小AMD64 - Can't change heap size AMD64

我正在尝试通过更改brk将堆大小增加100,但我不知道为什么我的代码不起作用。 这是尝试执行此操作的部分代码: 该程序应打印如下内容: x(打印InicialHeap) x + 100(打印InicialHeap + 100) x(打印InicialHeap) 但是它 ...

在i386 Linux上以组装方式提高BRK - Raising BRK in assembly on i386 Linux

我发现并研究了x86内存访问分段错误 ,该错误在我的代码中不起作用。 不同之处可能在于,我不使用单独的.text和.data段,而是通过创建自定义ELF标头将所有段保留在单个段中。 这是否可以解释为什么SYS_BRK调用失败? 然后,程序通过使内存页读/写/执行等继续操作。我试图找到说 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM