打印

实现和调试 Malloc、Free、Calloc 和 Realloc 的快速教程

[复制链接]
750|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elecintop|  楼主 | 2015-3-24 21:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

让我们编写一个malloc函数,看看它在既有程序中如何工作!

本教程假定你了解指针,知道C语言中 *ptr 间接引用一个指针, ptr->foo 表示 (*ptr).foo,malloc用于内存动态分配,并且熟悉链表的概念。如果想要学习本教程但你不了解C,请告知我哪些部分需要更详细的论述。如果你想要马上浏览所有代码,可以再这里查看。该测试代码由Andrew Roth提供,他的github代码仓库中存放了一些malloc函数的测试代码。


相关帖子

沙发
elecintop|  楼主 | 2015-3-24 21:39 | 只看该作者
另一个可能的方法是将Point3结构体包含在Object结构体中,完全避免指针的使用。

使用特权

评论回复
板凳
elecintop|  楼主 | 2015-3-24 21:39 | 只看该作者
条件的执行 / Conditional Execution

条件执行主要用在if语句中,同时也会用到由关系运算(<,==,>等)或bool运算(&&, !等)组成的复杂的表达式。尽可能的保持if和else语句的简单是有好处的,这样才能很好的条件化。关系表达式应该被分成包含相似条件的若干块。

使用特权

评论回复
地板
elecintop|  楼主 | 2015-3-24 21:40 | 只看该作者
下面的例子演示了编译器如何使用条件执行:
int g(int a, int b, int c, int d)
{
    if(a > 0 && b > 0 && c < 0 && d < 0)  //分组化的条件被捆绑在一起
        return a + b + c + d;
    return -1;
}


条件被分组,便以其能够条件化他们。

使用特权

评论回复
5
elecintop|  楼主 | 2015-3-24 21:40 | 只看该作者
Boolean表达式和范围检查 / Boolean Expressions & Range checking

有一种常见的boolean表达式被用来检查是否一个变量取值在某个特定的范围内,比方说,检查一个点是否在一个窗口内。
bool PointInRectangelArea (Point p, Rectangle *r)
{
    return (p.x >= r->xmin && p.x < r->xmax && p.y >= r->ymin && p.y < r->ymax);
}

使用特权

评论回复
6
elecintop|  楼主 | 2015-3-24 21:40 | 只看该作者
这里还有一个更快的方法:把(x >= min && x < max) 转换成 (unsigned)(x-min) < (max-min). 尤其是min为0时,更为有效。下面是优化后的代码:
bool PointInRectangelArea (Point p, Rectangle *r)
{
    return ((unsigned) (p.x - r->xmin) < r->xmax && (unsigned) (p.y - r->ymin) < r->ymax);
}

使用特权

评论回复
7
蜕变吧| | 2015-6-21 09:32 | 只看该作者
这些内存的释放一般用于纯c的PC端软件中,在单片机中很少用得到。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

1329

帖子

3

粉丝