问题标签 [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.

0 投票
4 回答
17203 浏览

linux - sbrk/brk 在 Linux 中是如何实现的?

我在考虑 Linux 内核是如何实现系统调用的,我想知道是否有人可以给我一个关于 sbrk/brk 工作原理的高级视图?

我已经查看了内核代码,但是其中有很多,我不明白。我希望有人提供摘要?

0 投票
1 回答
1080 浏览

pointers - 内存 (sbrk) 指针访问时 16 字节对齐移位

我使用 sbrk 编写了一个相当基本的内存分配器。我要求一块内存,比如 65k,并根据需要将其划分为请求动态内存的变量。我通过将内存添加回 65k 块来释放内存。65k 块源自 union sizeof(16-bytes)。然后我将块沿偶数 16 字节边界对齐。但我有不寻常的行为。

当我分配并开始填充我的数据结构时,访问内存看起来不错该成员的地址。

例如,这个特定成员的真实地址恰好是:0x100313d50,但在执行特定函数(没有什么特别之处)时,该成员的地址被表示为 0x100313d70。在调试器内部,我可以查询真实地址,并且在它出现的函数内部时它看起来是正确的。这也不是第一个被访问的成员,它是第三个,所以之前的两次内存访问都很好,但是在第三次访问期间,我看到了这种不寻常的转变。

我是否有可能通过未对齐的块访问此内存?这是可能的,但我希望会引发 SIGBUS 异常(SPARC 芯片)。我正在使用 -memalign=16s 进行编译,因此它应该使用 SIGBUS 而不是捕获和修复错位。

我所有的结构都填充在 16 字节的倍数上:sizeof(structure)%16 = 0。有没有人有过这种行为的经验?一般来说,什么类型的东西/东西/等等。可能会导致指针错误表示内存地址?

干杯,特蕾西。

现代 SPARC 处理器上的 Solaris 10、SunStudio-12、C 语言(如果有帮助的话)。

0 投票
3 回答
1119 浏览

c - C中的内存分配

以下是malloc()的一个非常非常简单的版本,似乎给我分配了一些空间,但是除了没有 free() 并且我不检查我是否已经超出分配的空间这一事实之外,怎么能我检查代码是否正确?

“C”专家会因为哪些明显的错误而扇我耳光?

0 投票
2 回答
11543 浏览

c - 如何释放 sbrk() 获得的内存?

我有一个自定义分配器函数,它使用 sbrk() 来获取内存。不再需要时如何释放此内存?

malloc() 是否有与 free() 等效的功能?

还是我必须使用 brk() 来设置数据段的结尾?

0 投票
5 回答
17596 浏览

c++ - How does sbrk() work in C++?

Where can I read about sbrk() in some detail?

How does it exactly work?

In what situations would I want to use sbrk() instead of the cumbersome malloc() and new()?

btw, what is the expansion for sbrk()?

0 投票
2 回答
2019 浏览

macos - How do you dynamically allocate memory in Mac OS X assembly?

I would like to dynamically allocate memory from an assembly program that does not link against the standard C library. Since brk(2) and sbrk(2) are unavailable on Mac OS X (10.6.2), what are the alternatives?

(I'm guessing that it involves a Mach call, but there seems to be little documentation around that)

0 投票
3 回答
147203 浏览

c - malloc() 是如何在内部实现的?

谁能解释malloc()内部是如何工作的?

我有时做过strace program,我看到很多sbrk系统调用,man sbrk谈论它正在被使用,malloc()但不多。

0 投票
2 回答
734 浏览

c - 在 C 中传递 sbrk() 和 intptr_t 与 int 有什么区别

它似乎对 sbrk 的功能没有影响,但在 sbrk() 的文档中它说它需要一个 intptr_t 参数。

当将 int 类型作为参数传递时,它有效(或至少似乎有效)。

这是在常规 C 中。

0 投票
1 回答
4497 浏览

c - C 中的内存分配器——如何利用 sbrk() 的空间

我一直在编写 malloc 的实现,想知道是否有人可以帮助我解决这个问题。

基本上,我想在使用 sbrk() 分配内存后重用内存,并确定内存是空闲的。

所以本质上,想象我的记忆是这样的

...我做了一些分配。当我分配内存时,每个位都有一个头(h)和数据(d)。

现在我已经有了这些洞,如果我想使用图表中的第一个间隙,我该如何设置它以便它也有一个头部(h)和一个身体(dd)?

我已经到了现在我有一个指向我想要的内存位置的指针的地步。在 C 中,它由指针指向。指针具有自定义类型,其中“元”是我定义的结构。所以现在我有

但是当我尝试做

或者

我得到一个段错误。

问题:如何设置它以使通过 sbrk() 分配的内存地址具有我的结构形式?显然我不能只使用 myPointer = malloc(sizeof(metaStruct)),因为我正在编写 malloc 本身。我也对 sbrk()'ing 更多空间不感兴趣,而是利用我指向的现有空间(我想忽略它的垃圾数据并使用空间)。

我该怎么做呢?

0 投票
1 回答
6150 浏览

c - mmap vs sbrk,性能比较

平均而言,这些调用中哪个更快?我听说mmap较小的分配更快,但我还没有听说过两者的比较。任何有关这些性能的信息都会很好。