我刚开始阅读Brian Kernighan 和 Dennis Ritchie的 The C Programming Language,我发现了这个语句:
除了静态定义和函数的局部变量提供的堆栈规则之外,该语言没有定义任何存储分配工具;没有堆或垃圾收集。
那么这是否意味着由于malloc()
函数从堆中返回一些内存地址,C 才喜欢访问堆内存?然后必须malloc
用其他语言编写,很可能是汇编还是B?
这可能是一个愚蠢的怀疑,但我必须清除它。谢谢。
C语言本身并没有直接指定堆或它应该如何工作,但确实提供了指针等。
malloc
它的表兄弟是 C 标准库的一部分,并且是与 C 的任何标准实现链接的函数,它们确实提供对非静态或堆栈上的内存的访问。在每个平台上,这些函数实际获取和管理内存的方式可能不同。
C 是一门久负盛名的语言和库,现在它们似乎是一个整体。但是当 K&R 编写那本书时,这并不是那么明显,并且该声明澄清了属于语言本身的语法(相对于支持库通常提供的)。
我认为作者在谈论“语言”时非常准确。当您谈论 C 时,您拥有语言和标准库。在语言本身中,没有动态内存分配工具,但标准库提供了这些工具。
语言中没有明确定义堆。但是,实现确实将它用于动态分配的内存。
请参阅有关各种分配的讨论,包括堆:
malloc 从操作系统内核获取分配给它的内存。所有语言都这样做。这就是操作系统如何确保程序有可用空间的方式,尽管它不会或可能不会阻止它们,尤其是那些用 C 编写的程序,试图超越任何限制。