2.2.2 抽象和规范
操作系统提供了一定程度的保护措施,而编程(www.cppentry.com)语言通常没有。那些编写新的抽象给其他程序员用的程序员,往往不得不依靠用户自己去遵守编程(www.cppentry.com)语言技术上的限制。这些用户不仅要遵守语言的规则,还要遵守其他程序员制定的规范。
例如,由malloc函数实现的动态内存的概念就是C库中经常使用的抽象。你可以用一个数字作参数来调用malloc,然后它在内存中分配空间,并给出地址。当你不再需要这块内存时,就用这个地址作参数来调用free函数,这块内存就返回给系统留作它用。
在很多情况下,这个简单的抽象都相当有用。不论规模大小,很难想象一个实际的C程序不使用malloc或者free。但是,要成功地使用抽象,必须遵循一些规范。要成功地使用动态内存,程序员必须:
• 知道要分配多大内存。
• 不使用超出分配的内存范围外的内存。
• 不再需要时释放内存。
• 只有不再需要时,才释放内存。
• 只释放分配的内存。
• 切记检查每个分配请求,以确保成功。
要记住的东西很多,而且一不留神就会出错。那么有多少可以做成自动实现的呢?用C的话,没有多少。如果你正在编写一个使用了动态内存的程序,就难免要允许你的用户释放掉任何由他们分配的内存,这些内存的分配是他们对程序调用请求的一部分。