
基础库
文章平均质量分 66
ycnian
这个作者很懒,什么都没留下…
展开
-
C基础库
最近看了点C基础库的代码,主要是Android系统的C基础库bionic,对比浏览了一些glibc的代码,多少有一些收获吧。好久没更新博客了,写几篇C基础库的文章算是记录这段时间的学习过程吧。 C基础库是操作系统中最底层的函数库,提供了大量的基础函数,比如标准I/O函数、字符处理函数、字符串处理函数、数学函数、内存分配器等,基本上就是实现了C99标准中规定的函数。C基础库之所以称为“基础原创 2013-10-12 22:37:19 · 1664 阅读 · 0 评论 -
dlmalloc(三)
有了上篇文章的基础,现在可以详细分析malloc()申请内存的流程了,代码如下:void* dlmalloc(size_t bytes) { /* Basic algorithm: 算法描述 If a small request (< 256 bytes minus per-chunk overhead): 1. If one exists, us原创 2013-10-25 15:53:23 · 4405 阅读 · 0 评论 -
数学函数库(三)
上一篇文章中我们以truncf()为例讲解了数学函数的处理过程,可以看出处理过程还是很麻烦的。而且需要注意的是我们挑选的是一个很简单的函数,其他数学函数的处理过程更麻烦。因此一些处理器集成了浮点运算单元,通过硬件计算数学函数,从而加快了数学函数的处理过程。这篇文章中,我想以X86架构为例说明硬件处理数学函数的过程。原创 2013-10-21 18:04:41 · 1405 阅读 · 0 评论 -
字符串处理函数
这篇文章中我想讨论下strlen()的问题。strlen()的作用是计算一个字符串的长度,最简单的代码如下:size_t strlen(const char *str){ const char *s; for (s = str; *s; ++s) ; return (s - str);}原创 2013-10-22 17:04:46 · 1013 阅读 · 0 评论 -
数学函数库(二)
上一篇文章中我们熟悉了浮点数在内存中的存储方式,这篇文章中我们来分析一下数学库中提供的函数。数学库中包含了很多函数,比如取整函数、三角函数、指数对数函数、贝塞尔函数、伽马函数等等,很多函数是对具体一个算法或数学问题的描述。我们从中挑选了一个简单的函数,目的是分析清楚数学库中浮点数的处理过程,同时又不要陷入数学问题当中。我们挑选的函数是truncf(),这个函数声明如下:float truncf原创 2013-10-21 16:12:48 · 1229 阅读 · 0 评论 -
dlmalloc(一)
我们写过很多C程序了,经常会分配内存。记得刚学C语言时老师说过,可以向两个地方申请内存:一个是栈、一个是堆。小块内存向栈申请,函数调用结束后程序会自动释放内存。大块内存向堆申请,记得一定要自己释放,否则会造成内存泄漏。向堆申请内存直接调用malloc()就可以了,参数是你申请的内存量。释放内存时直接调用free()就可以了,参数是内存块指针。看似平静的海面,海底则波涛汹涌。当时还没有学操作系统原创 2013-10-23 15:37:26 · 10373 阅读 · 2 评论 -
数学函数库(一)
首先来看下面这个小程序#include int main(){ float var1 = 33554434.0; float var2 = 33554433.0; printf("%f\n", var1 - var2); return 0;}程序很简单,那么这段代码的输出是什么呢?遗憾地告诉大家:这段代码的输出原创 2013-10-21 13:42:35 · 1282 阅读 · 0 评论 -
dlmalloc(二)
dlmalloc原创 2013-10-24 16:43:57 · 4361 阅读 · 0 评论 -
最小C基础库
还是从我们最熟悉的程序说起,我们学编程时接触到的第一个程序就是helloworld,代码如下:#include int main(){ printf("hello world\n"); return 0;}我们使用gcc编译这个程序 gcc -o helloworld hellworld.c就可以生成可执行文件helloworld,执原创 2013-10-12 23:05:38 · 2013 阅读 · 0 评论 -
dlmalloc(四)
这篇文章我们来讲讲释放内存的过程,也就是free()的代码流程。对于应用程序来说释放内存很简单,直接调用free(ptr)就可以了,参数是要释放的内存块指针。那么,释放内存时dlmalloc做了哪些工作呢?原创 2013-10-28 11:03:40 · 2740 阅读 · 0 评论