加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么以及何时在C中无法使用malloc()?

发布时间:2020-12-16 09:21:45 所属栏目:百科 来源:网络整理
导读:我已经获得了一个基于8051的板,内置了一个嵌入式操作系统.我正在使用SDCC在操作系统之上创建应用程序.并且malloc不可用所以我必须静态分配内存.这是为什么? malloc不应该在编译器中的动态库上吗? 解决方法 TL; DR: Why and when malloc() will not be ava
我已经获得了一个基于8051的板,内置了一个嵌入式操作系统.我正在使用SDCC在操作系统之上创建应用程序.并且malloc不可用所以我必须静态分配内存.这是为什么? malloc不应该在编译器中的动态库上吗?

解决方法

TL; DR:

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,所以它不能是一致的托管实现,但它可以是一个符合标准的独立实现.它应该记录它声称是哪一个,如果有的话.如果它是独立的,但提供其他标准库函数,那么你可以认为这是一种奢侈.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读