有关malloc的问题
各位,
我想请教一下,lcc 的 malloc 函数是如何实现的? 我看了一下 lcc 的 source,感觉lcc 是用 旧的 c 语法(非ANSI)写的,并用旧的C编译器进行编译的(当然,用gcc也行,它也支持旧的C语法)。里面的 malloc 函数应该不是重新写的,是调用库里的函数。不知道我的理解对不对?我看的是 lcc-3.6版本
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
先顶一下
malloc是libc,不是compiler的部分。lcc是C89写的,BURS不错,我唯一有印象的地方。
传统的malloc(),形式上是个库函数。做堆分配,虚存这块工作,在库函数里做完,物理内存的分配由系统调用完成。
谢谢各位的回复。
我再细想了一下,那是不是应该是这样子的:
在LCC代码里面只有2种内容:
1、LCC代码开发者自己定义的变量,函数等(自定义的信息)
2、C标准函数库里的函数(如:printf, malloc等,这些由操作系统提供)
最后,用GCC编译器去编译LCC的代码。GCC编译器所做的工作是将LCC代码中自定义的信息(即上面第1点的内容)翻译成汇编语言并设置好“用到的C标准函数库里的函数”的导入声明(即extern语句),然后用汇编编译器编译翻译后的汇编文件,最后经过链接标准函数库里的函数而形成LCC编译器。在整个LCC编译的过程里面,并不依赖C的“资源”(因为标准函数库是操作系统提供的)。
是这样吗?
[ 本帖最后由 ts0612 于 2009-7-11 08:41 编辑 ]
>> 1、LCC代码开发者自己定义的变量,函数等(自定义的信息)
没错,绝大部分情况下,每个软件都提供自己的函数
>> 2、C标准函数库里的函数(如:printf, malloc等,这些由操作系统提供)
库函数是由 glibc 类似的库提供的,不是操作系统提供
操作系统提供的是 api ,也就是操作系统对外界提供接口和服务,用来访问操作系统的资源
1)我在前面的回帖并非针对LCC的。我不熟悉LCC。
2)标准的说法,C库函数不属于C本身,或者明确地说:不属于C内核。C开发工具生产商把C编译器、链接器、C库函数,还有一些实用工具打包在一起提供给开发者的。
3)库函数不是由操作系统提供的。操作系统提供的是系统调用。在类UNIX系统里,由于系统与C的特殊关系,系统调用与C库函数的形式是相似的,容易混淆。
4)很多C库函数,里面做一些实质性工作时,其实是调用某些系统调用。譬如,malloc(),在调用过程中,前后两段走的是用户态,中间一段走的是系统态。它调用的是系统调用sbrk()。
5)因为3),你的“最后。。。”可能要重新思考。
[ 本帖最后由 beepbug 于 2009-7-12 05:57 编辑 ]