如何在使用malloc旁边访问堆内存?

fud*_*din 4 c heap

有没有一种方法可以在不调用malloc的情况下从堆中分配内存?以下电话可以对它有效吗?

void* loc = (void*) &heap[end_of_heap];
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 7

不,C语言本身不提供此类功能.如果您只关心Unix系统符合旧版Unix标准(SUSv2或更早版本,如果我没记错的话)的弃用特性,那么这些brksbrk函数提供了这一功能.但是你真的不应该使用它,除非你编写的是非常低级的代码,永远不需要是可移植的.

  • 实际上,有一种中途可移植的方法:全局声明:`unsigned char heap [1000000000];`或类似的并使用.. ;-) (2认同)

Ale*_*lli 6

除了malloc和朋友之外没有可移植的方式,但是如果你愿意在老式的Unix(不是当前的Posix)中获得特定于平台的sbrk(和brk),那么它曾经是底层的系统调用.现在他们的manpage说

避免使用brk()和sbrk():malloc(3)内存分配包是分配内存的便携和舒适的方式.

并且这个建议肯定是好的(即使在提供它们的平台上也没有使用老式系统调用的真正优势). 对某些现代Unix版本来说,mmap有些/dev/是完全不同的方式,Windows为此目的有自己完全不同的"win32 API调用",依此类推.