分页: 3 / 4

发表于 : 2007-07-22 23:30
3162073
laborer 写了:
3162073 写了:调用malloc 编译器无非就是調系统调用... 把参数压里栈后调用int 0x80,in21h 什么的.. 反汇编是看不出什么东西.. 本来都是黑箱.. 要实现 malloc自己写个小系统就知.. 这个东西不是在应用层的
malloc的实现不完全是系统调用。可以想象一下,如果是需要分配的内存比较小的时候,每次都进入内核态让内核处理,多累啊。
把需要分配内存的大小作为参数算出来这是malloc的工作,怎么告诉系统,把malloc联系系统调用是编译器的工作.. 分配内存,是系统的工作,确实每次都要让内核处理

发表于 : 2007-07-22 23:47
skyx
xhy 写了:比如说我想知道memcpy是怎么实现的
直接一翻源代码就知道了

还有vim ctags等非常好用的代码工具
学好linux开源软件实现思想后方便今后开发更好的for m$商业闭源收费软件,赚大钱?或者申报一个课题抄袭开源软件发国难财?

发表于 : 2007-07-22 23:54
xhy
skyx 写了:
xhy 写了:比如说我想知道memcpy是怎么实现的
直接一翻源代码就知道了

还有vim ctags等非常好用的代码工具
学好linux开源软件实现思想后方便今后开发更好的for m$商业闭源收费软件,赚大钱?或者申报一个课题抄袭开源软件发国难财?
just for fun
以后不打算混IT业

发表于 : 2007-07-23 3:23
laborer
3162073 写了:
laborer 写了:
malloc的实现不完全是系统调用。可以想象一下,如果是需要分配的内存比较小的时候,每次都进入内核态让内核处理,多累啊。
把需要分配内存的大小作为参数算出来这是malloc的工作,怎么告诉系统,把malloc联系系统调用是编译器的工作.. 分配内存,是系统的工作,确实每次都要让内核处理
从逻辑上分析,在i386上,内核分配内存一次最少一页,也就是4KB,而malloc一次可以只分配1个Byte,总不可能每次malloc(1)的时候都去分配4KB的容量吧。

其实做个小实验就能看出来了,你可以用strace看看是不是每次malloc都会mmap或者brk。

当然,不排除有些简单的libc实现直接就让内核处理了(比如某些嵌入式运用上),但是主流的肯定是libc和kernel的内存分配算法混合的。

发表于 : 2007-07-26 0:25
yiyaman
xhy 写了:
Amankwah 写了:vim编辑C源文件的时候new不会高亮,VC++弄得我怎么看怎么不爽,怎么连C和C++都不区分呢?
一个字,傻~
C源文件new为什么要高亮? C语言难道有new?
C++里new高亮是没问题的
似乎人家就在批评VC连C的new都高亮这个问题,而不是说C的new需要高亮

发表于 : 2007-07-26 17:20
yingtaoting
Glibc分配算法:

小于等于64字节:用pool算法分配。
64到512字节之间:在最佳凭配算法分配和pool算法分配中取一种合适的。
大于等于512字节:用最佳凭配算法分配。
大于等于128K:直接调用OS提供的函数(如mmap)分配。

发表于 : 2007-07-26 19:17
David50814
xhy 写了:windows下很多源码是看不了的
比如说创建一个进程 具体是怎么实现的?
比如说malloc分配内存 又是怎么实现的?
这个在Linux下怎么看呢请问

发表于 : 2007-08-25 20:46
David50814
我看了一下ubuntu的内核源码
但是不知道从哪看起,请高手指教

发表于 : 2007-08-25 20:47
David50814
我看了一下ubuntu的内核源码
但是不知道从哪看起,请高手指教

发表于 : 2007-08-27 2:52
angelx
编程的环境很重要,例如微软的VS2005,功能强大,操作简单。如果Linux也有这么方便的编程环境,哪种语言也不成问题吧!呵呵,个人比较喜欢C。

发表于 : 2007-08-27 8:29
czk
linux下接口的命名习惯和C语言一致,看起来舒服,讨厌匈牙利命名法。

发表于 : 2007-08-27 12:01
依寻依然
Linux在源代码层面上更标准一些,封装性比win下的要好。
另,msdn真的不怎么样,学长公司买的正版msdn,每月都有新增,但是看起来还是有些乱。个人感觉还不如Java的API做得好

发表于 : 2007-08-27 14:27
oiniya
czk 写了:linux下接口的命名习惯和C语言一致,看起来舒服,讨厌匈牙利命名法。
貌似M$.net已经抛弃这种命名方法了,它只是特定历史时期的产物,因为现在很多开发环境下,都可以直接提示变量类型
之类的信息了,所以不需要用前缀来特意表明,当然维护繁琐也是匈牙利命名法被淘汰的原因之一。
至于linux下的命名方法,也不是十分喜欢,有兴趣的可以看看C#编码规范,它的命名规则比较舒服。

发表于 : 2007-08-27 14:40
oiniya
初学者来说,绝对是windows下编程更为惬意,特别是对我们这些从小就在WIN里面泡惯了的学生来说...

linux下编程的好处?
1,可以不用盗版IDE了,心里比较舒服?
2,编译器、编辑器、调试器就那么几个,就算升级,用法也不会出现太多变化,各种IDE也基本都是调用这些基本命令
组装起来的,使用起来不会有太多困难。而WINDOWS下面每个厂商开发的IDE各不相同,就算是同一厂商,不同版本的ide也常常会有很大区别,更换开发环境或者进行版本升级都有一个再学习的过程。
3,LINUX下没有那么丰富的游戏资源,估计可以比较专一的进行编程吧(条件:没有两个以上的系统)
4,据统计LINUX程序员比WIN程序员工资高30%左右...

发表于 : 2007-08-27 18:13
stlxv
David50814 写了:我看了一下ubuntu的内核源码
但是不知道从哪看起,请高手指教
你可以自己编译一个内核,然后一边调试一边看源码