问题标签 [sbrk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 为什么 malloc(1) 给出的页面大小不止一个?
我曾在我的机器上尝试使用 sbrk(1),然后故意写出测试页面大小,即 4096 字节。但是当我调用 malloc(1) 时,我在访问 135152 字节后得到了 SEGV,这远远超过一页大小。我知道 malloc 是库函数,它依赖于实现,但考虑到它最终会调用 sbrk,为什么它会给出一个以上的页面大小。谁能告诉我它的内部工作?
我的操作系统是 ubuntu 14.04,我的架构是 x86
更新:现在我想知道是否是因为 malloc 将地址返回到一个足够大以容纳我的数据的空闲列表块。但是那个地址可能在堆的中间,这样我就可以继续写,直到达到堆的上限。
rust - 有没有办法在 Rust 代码中使用 unistd.h 中的函数?
我正在尝试实现 malloc 类型的函数,但我不知道要使用什么来代替 unistd.h 中用于 C 的 sbrk 函数。有没有办法将 unistd.h 转换为 Rust 程序?
c - 静态库中的 Newlib 存根
我正在使用 Eclipse 开发裸机应用程序。我链接到 newlib,所以我提供了我自己的 _sbrk() 实现。此功能通常包含在我的项目中,并且一切正常。
现在我尝试将此函数移动到我在过去几个月开发的静态库中。
在链接期间,我收到一个undefined reference to _sbrk
错误。该文件所在的路径已正确包含在 Eclipse 设置中(同一目录中的其他文件已正确链接)。
显然,链接器通过我的代码的顺序有问题,这个函数被丢弃了。
我尝试使用__attribute__((used))
,没有运气。
如何通过 Eclipse 设置克服这个问题?(基于 Makefile 或命令行编译不是我需要的解决方案)。
linux - 如何找到程序中断的当前位置
我尝试在 brk 系统调用函数中添加它:
但它在内核编译期间返回错误,即隐式声明 sbrk 函数。而且我找不到定义 sbrk 的位置!!我需要测量的是,每当某个用户进程试图扩展它的程序中断地址时,我就会知道它当前的程序中断地址,这样我就可以测量有多少内存进程正在请求。
谢谢你。
c - 为什么我在 sbrk 之后会遇到无效内存?
我正在尝试使用sbrk
系统调用来请求一个内存页面并将该页面分成小块,但我的代码总是会遇到一些无效内存:
就像我得到sbrk(0)
了一样0x804d000
,之后的绑定sbrk(one_page_size)
会是0x8055000
,但是代码会在0x804e000
.
c - 多个 malloc 调用在内部只调用一次 mmap
当我尝试下面的代码时,我无法清楚地分析 malloc api 内部调用。我不清楚的是系统调用 mmap 只为 2 个或多个 malloc 调用调用一次。如果我分配的字节数也超过 4069在内部仅调用一个 mmap(使用 strace -p processid 标识跟踪)。
strace 输出:
我正在寻找的是,如果 malloc 使用得更多,那么它会调用一个以上的 mmap,因为内存超过了两个 malloc 超过 4096
linux - 用 `mmap` 替换 `sbrk`
我读过这sbrk
是一个不推荐使用的调用,应该更喜欢mmap
使用 MAP_ANONYMOUS
标志。我需要一个可以增长的连续(逻辑)内存块。但是,mmap
将第一个参数视为提示,因此它可能会产生间隙,这在我的情况下是不可接受的。我尝试使用MAP_FIXED
标志(不推荐使用它作为文档状态)并且我可以获得连续的内存,但是在映射了几页之后我的程序出现了奇怪的行为:系统功能printf
开始clock_gettime
失败。我猜mmap
我调用的第一个没有MAP_FIXED
返回页面,它后面有一些映射页面,其中包含系统数据。那么正确的使用方法mmap
是sbrk
什么?
memory-management - 用sbrk减小堆会和数据段冲突吗?
我知道给堆分配过多的空闲内存会和栈发生冲突,但是数据段呢?因为 sbrk 可以与负值一起使用。提前致谢。
c - newlib 中的 malloc() :在一次大失败分配后是否会浪费内存?
我正在为 STM32F7 编写嵌入式软件,我的 libc 是 newlib-2.4.0.20160527。
我已经实现_sbrk()
如下:
然后,当我执行以下操作时:
一切正常(即 malloc 两次返回非零值)。
但是当我执行以下操作时(出于测试目的):
每个malloc()
失败,甚至malloc(0)
(即,__BKPT()
从未达到)。所以,实际上堆上没有分配的内存(我没有得到任何内存,mem != 0
所以我什free()
至什么都做不到),也没有可用的内存。
我希望malloc()
每一次都失败sz > 0x40000
并为每一次成功sz <= 0x40000
(假设在每一次free()
之后都可以正常工作malloc()
)。
我错过了什么,或者这是 newlib 中的错误或预期行为?