有关malloc的问题

发布于 2022-09-18 17:07:22 字数 183 浏览 15 评论 0

各位,

我想请教一下,lcc 的 malloc 函数是如何实现的? 我看了一下 lcc 的 source,感觉lcc 是用 旧的 c 语法(非ANSI)写的,并用旧的C编译器进行编译的(当然,用gcc也行,它也支持旧的C语法)。里面的 malloc 函数应该不是重新写的,是调用库里的函数。不知道我的理解对不对?我看的是 lcc-3.6版本

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

时常饿 2022-09-25 17:07:22

先顶一下

帝王念 2022-09-25 17:07:22

malloc是libc,不是compiler的部分。lcc是C89写的,BURS不错,我唯一有印象的地方。

冷︶言冷语的世界 2022-09-25 17:07:22

传统的malloc(),形式上是个库函数。做堆分配,虚存这块工作,在库函数里做完,物理内存的分配由系统调用完成。

苍暮颜 2022-09-25 17:07:22

谢谢各位的回复。

我再细想了一下,那是不是应该是这样子的:

在LCC代码里面只有2种内容:

1、LCC代码开发者自己定义的变量,函数等(自定义的信息)

2、C标准函数库里的函数(如:printf, malloc等,这些由操作系统提供)

最后,用GCC编译器去编译LCC的代码。GCC编译器所做的工作是将LCC代码中自定义的信息(即上面第1点的内容)翻译成汇编语言并设置好“用到的C标准函数库里的函数”的导入声明(即extern语句),然后用汇编编译器编译翻译后的汇编文件,最后经过链接标准函数库里的函数而形成LCC编译器。在整个LCC编译的过程里面,并不依赖C的“资源”(因为标准函数库是操作系统提供的)。

是这样吗?

[ 本帖最后由 ts0612 于 2009-7-11 08:41 编辑 ]

暮色兮凉城 2022-09-25 17:07:22

>> 1、LCC代码开发者自己定义的变量,函数等(自定义的信息)

      没错,绝大部分情况下,每个软件都提供自己的函数

>> 2、C标准函数库里的函数(如:printf, malloc等,这些由操作系统提供)

     库函数是由 glibc 类似的库提供的,不是操作系统提供

  操作系统提供的是 api ,也就是操作系统对外界提供接口和服务,用来访问操作系统的资源

我们的影子 2022-09-25 17:07:22

原帖由 ts0612 于 2009-7-11 08:38 发表
谢谢各位的回复。

我再细想了一下,那是不是应该是这样子的:

在LCC代码里面只有2种内容:

1、LCC代码开发者自己定义的变量,函数等(自定义的信息)

2、C标准函数库里的函数(如:printf, malloc等,这些由操作系统提供)

最后,用GCC编译器去编译LCC的代码。GCC编译器所做的工作是将LCC代码中自定义的信息(即上面第1点的内容)翻译成汇编语言并设置好“用到的C标准函数库里的函数”的导入声明(即extern语句),然后用汇编编译器编译翻译后的汇编文件,最后经过链接标准函数库里的函数而形成LCC编译器。在整个LCC编译的过程里面,并不依赖C的“资源”(因为标准函数库是操作系统提供的)。

是这样吗?

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 编辑 ]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文