免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2129 | 回复: 6
打印 上一主题 下一主题

有关malloc的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-08 18:47 |只看该作者 |正序浏览
各位,

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

论坛徽章:
0
7 [报告]
发表于 2009-07-11 14:18 |只看该作者
原帖由 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 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-07-11 09:28 |只看该作者
>> 1、LCC代码开发者自己定义的变量,函数等(自定义的信息)

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


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

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

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

论坛徽章:
0
5 [报告]
发表于 2009-07-11 08:38 |只看该作者

回复 #4 beepbug 的帖子

谢谢各位的回复。

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

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

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

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

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

是这样吗?

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

论坛徽章:
0
4 [报告]
发表于 2009-07-11 06:02 |只看该作者
传统的malloc(),形式上是个库函数。做堆分配,虚存这块工作,在库函数里做完,物理内存的分配由系统调用完成。

论坛徽章:
0
3 [报告]
发表于 2009-07-08 21:52 |只看该作者
malloc是libc,不是compiler的部分。lcc是C89写的,BURS不错,我唯一有印象的地方。

论坛徽章:
0
2 [报告]
发表于 2009-07-08 18:48 |只看该作者

回复 #1 ts0612 的帖子

先顶一下
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP