gpt4 book ai didi

c - 为什么以及何时 malloc() 在 C 中不可用?

转载 作者:太空狗 更新时间:2023-10-29 16:05:26 25 4
gpt4 key购买 nike

我得到了一 block 带有嵌入式内部操作系统的基于 8051 的电路板。我正在使用 SDCC 在操作系统之上创建应用程序。而且 malloc 不可用,所以我必须静态分配内存。这是为什么? malloc 不应该在编译器中的动态库中吗?

最佳答案

长话短说:

Why and when malloc() will not be available in C?

唯一可以笼统地说的是 malloc() 将由每个符合标准的托管 C 实现提供,但还有其他类型,包括另一种符合标准的类型。


Isn't malloc supposed to be on a dynamic library within the compiler?

不完全是。 malloc() 是 C 标准库的一部分,因此它由每个符合标准的托管 C 实现提供。 C 实现包括用于将 C 源代码转换为可执行程序的系统以及用于运行结果程序的机制和环境。前者通常围绕编译器展开。后者包括与实现提供的一样多的 C 标准库,这部分是 malloc 所在的位置(如果可用)。因此,不,malloc 在技术上不是编译器 的一部分。

我敢肯定这不是您要援引的区别,但它确实与答案有关。请注意,我说过 malloc 是由 hosted 实现提供的。这些是您通常在通用操作系统上遇到的类型。他们创建通过主机操作系统以标准方式启动的程序,并提供与操作系统相结合的 C 标准库的所有功能。但也有独立的实现。关键区别之一是独立实现无需提供大部分标准库,包括 malloc()

您通常会发现用于嵌入式系统或在嵌入式系统上使用的独立实现,例如您的系统。它们还用于操作系统内核、引导加载程序和其他直接在裸机上运行的此类程序。您的程序在操作系统之上运行使您的环境有点像嵌入式系统中的凯迪拉克,但不能确保 C 实现是托管的。由于它不提供 malloc,因此它不能是一个符合 的托管实现,但它可以是一个符合要求的独立实现。它应该记录它声称是哪个(如果有的话)。如果它是独立的但提供其他标准库函数,那么您可以认为这是一种奢侈。

关于c - 为什么以及何时 malloc() 在 C 中不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52295683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com