c中没有堆?
我刚开始阅读Brian Kernighan和Dennis Ritchie的C编程语言,并且我发现了这样一段话:
除了静态定义和由函数的局部变量提供的堆栈规则以外,该语言没有定义任何存储分配工具; 没有堆或垃圾收集。
那么这是否意味着它是由malloc()
函数产生的,该函数从堆中返回一些内存地址,C可以访问堆内存? 然后必须用其他语言编写malloc
,最可能是程序集或B?
这可能是一个愚蠢的疑问,但我必须清除它。 谢谢。
C语言本身并不直接指定堆或它应该如何工作,但确实提供了指针等。
malloc
和它的表兄弟是C标准库的一部分,它们是你链接到C的任何标准实现的函数,并且它们提供对非静态或堆栈内存的访问。 在每个平台上,这些功能实际获取和管理内存的方式可能不同。
C是一个长期以来的语言和图书馆,现在看起来它们都是一块儿。 但是,当K&R写这本书的时候,这并不是那么明显,这个陈述是对属于语言本身的语法的澄清(与通常由支持库提供的内容相比)。
我认为,当作者说他们正在谈论“语言”时,作者非常确切。 当你谈论C时,你有语言和标准库。 在语言本身中,没有动态内存分配工具,但标准库提供这些工具。
语言中没有明确定义堆。 但是,实现会将其用于动态分配的内存。
请参阅关于各种分配的讨论,包括堆:
http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
链接地址: http://www.djcxy.com/p/28475.html下一篇: Need assistance in understanding this code using malloc and pointers