问题标签 [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.
posix - 使用 brk 获取 brk_start
int brk(void *end_data_segment) 手册;说:“brk() 将数据段的结尾设置为 end_data_segment 指定的值”
成功时返回 0,否则返回 -1。
但是如何获得我的中断的初始值(如 sbrk(0))?
此致,
malloc - “malloc_trim(0)”到底是什么意思?
手册页告诉了我很多,通过它我知道了很多“glibc”内存管理的背景知识。
但我仍然感到困惑。“ malloc_trim(0) ”(注意零作为参数)是否意味着(1.)“堆”部分中的所有内存都将返回给操作系统?或者(2.)只是堆的最顶部区域的所有“未使用”内存都将返回给操作系统?
如果答案是 ( 1. ),如果堆中仍然使用的内存怎么办?如果堆在某个地方使用了内存,它们会被消除,还是函数无法成功执行?
如果答案是(2.),那么那些“空洞”在位置而不是堆顶部呢?它们不再是未使用的内存,但堆的最顶部区域仍在使用,这个调用会有效吗?
谢谢。
arduino - Atmel Studio 6.1 中的 Arduino 到期。没有 Visualmikro
我更喜欢来自http://www.engblaze.com/tutorial-using-atmel-studio-6-with-arduino-projects/的教程而不是 Visualmikro,因为我喜欢能够跳入 arduino 函数并修改它们而不必安装任何类型的插件。
我尝试按照教程编译我的项目,但它不起作用:“未定义对 _sbrk 的引用”。对我来说,这听起来像是一个非常糟糕的链接器错误?
我需要修改一些内容,因为本教程是为旧版本的 IDE 编写的,并且针对的是 AVR 而不是 SAM:
GNU C++/符号
- 项目清单
- F_CPU = 84000000L
- 阿杜诺=154
GNU C++/目录
- [...]\Arduino\硬件\arduino\sam\cores\arduino
- [...]\Arduino\hardware\arduino\sam\variants\arduino_due_x (不得不改变这个)
- [...]\Arduino\硬件\arduino\sam\system\libsam
ARM/GNU 链接器/库
- libcoreDue.a(我添加了 Due,以便能够识别 arduino 的类型)
- libsam_sam3x8e_gcc_rel_a
- 以及这两个文件的路径。
知道我可能错过了什么吗?
太感谢了!
c - 在 malloc.c 中如何/在哪里使用 sbrk?
我在 Advanced Unix Programming(以及其他几本书)中读到 Linuxmalloc()
使用 Linux 系统调用sbrk()
从操作系统请求内存。
我正在查看 glibcmalloc.c
代码,我可以在评论中看到很多提及sbrk()
,但在代码中没有直接提及。
从操作系统请求内存时如何/在哪里sbrk()
引用/使用?malloc()
(这可能是我对如何从 C 运行时库进行系统调用的普遍误解。如果是这样,我很想知道它们是如何进行的??)
c - C: sbrk() 地址是升序还是降序?
当 sbrk() 返回指向堆开始地址的指针时,地址是升序还是降序?例如,如果我有一个从地址 1 到 10 的 10 字节堆,那么 sbrk() 会返回指向地址 10 还是 1 的指针?
类似地,堆地址趋于“向下”增长......但我如何才能确定我的计算机上的地址是增加还是减少?
c - sbrk(0) 会失败吗?
我想知道是否有人已经看到 sbrk(0) 失败?
我的意思是,如果你能达到这个功能,你显然之前有权访问内存,所以检查当前的中断位置应该没问题,对吧?
编辑:例如,我应该考虑错误异常吗?
c - 使用 valgrind 检查内存分配
编写我自己的 malloc() 版本(和他最好的朋友 free() 先生),我需要知道我是否正确地释放了我的记忆。似乎我不能使用 valgrind,因为它会检查 libc'malloc,而我的位于加载了 LD_PRELOAD 的共享库中。
目前,如果我使用 valgrind,它会显示“0alloc 0free 0leak,一切都很好”,因为它没有检测到我对我的 malloc 所做的分配。(我使用 (s)brk() 函数)
有人知道是否有办法检查 valgrind 或其他东西吗?
谢谢 !
mips - 使用 sbrk 的 MIPS 动态内存分配
我试图sbrk
用于动态内存分配。但是,作为 SPIM 和 MIPS 的新手,我无法这样做。我草拟了一个粗略的代码。
c - 将指针转换为 int
我正在为任务编写自己的函数,malloc
并free
在 C 中编写函数。我需要利用 Csbrk()
包装函数。据我了解sbrk()
,程序的数据空间增加了作为参数传递的字节数,并指向程序中断的位置。
如果我有以下代码片段:
#define BLOCK_SIZE 20
int x;
x = (int)sbrk(BLOCK_SIZE + 4);
我得到编译器错误warning: cast from pointer to integer of different size
。为什么会这样,无论如何我可以将指向的地址转换sbrk()
为一个int
?
c - sbrk 和负参数
使用 sbrk 释放内存时遇到问题。我通过 sbrk 一个负值,但它不会减少堆的开始。这是代码
这是示例输出:
0x10734f000
0x10734f002
我不明白为什么在 sbrk 减一后打印的值没有返回为 0x10734f001 。
我不允许在这个程序中使用 malloc。这是使用 sbrk 的 malloc 和 free 的自定义实现