我已经获得了一个基于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是由托管实现提供的.这些是您通常在通用操作系统上遇到的那种.它们创建通过主机操作系统以标准方式启动的程序,它们与操作系统一起提供C标准库的所有功能.但也有独立的实现.其中一个关键区别是独立实现可以免于提供大多数标准库,包括malloc().
您通常会在嵌入式系统中找到独立的实现,例如您的嵌入式系统.它们还用于OS内核,引导加载程序和其他此类程序,而不是直接在裸机上运行.您的程序在操作系统之上运行会使您的环境成为嵌入式系统中的凯迪拉克,但不能确保C实现是托管系统.因为它不提供malloc,所以它不能是一致的托管实现,但它可以是一个符合标准的独立实现.它应该记录它声称是哪一个,如果有的话.如果它是独立的,但提供其他标准库函数,那么你可以认为这是一种奢侈.