编程习惯:提供内存分配的成对原则

原创 2008年09月25日 12:17:00
  读《windows核心编程 4ed》(Jeffrey Richter 著 黄陇、李虎 译)后的笔记
开发人员可能会犯这么一个错误:提供申请内存空间的函数,却没有提供对应的释放空间的函数,而是寄希望于用户(程序员)通过标准释放方式来解决问题。

如以下代码:
  1. VOID EXEFunc()
  2. {
  3.     PVOID pv = DLLFunc();
  4.     free(pv);
  5. }
  6. PVOID DLLFunc()
  7. {
  8.     return (malloc(100));
  9. }

在一般情况下,这么做(调用free)不会有什么问题,但这不绝对:
1、正如书中所言(P487),如果EXEFunc()和DLLFunc()两者或其中之一链接到静态版本的C/C++运行时库,
则对free的调用就会失败。
2、补充:不该对DLLFunc的实现做假设!假如它的实现调用的不是malloc而是new,或者自定义的内存池呢?
接口和实现的分离原则确保了接口的稳定性,但实现却可以变化。

基于以上原因,正确的设计是同时编写一个DLLFreeFunc函数:
  1. BOOL DLLFreeFunc(PVOID pv)
  2. {
  3.     return ( free(pv) );
  4. }

oracle中pga内存分配原则

pga_aggregate_target 通常缩写为P_A_T,该参数同时限制全局pga分配和私有工作区内存分配 在oracle9i以及10gr1中,单个sql操作内存使用存在如下限制: 对于串行...

使用C语言编程时变量内存分配

  • 2011年02月15日 11:28
  • 11KB
  • 下载

JAVA虚拟机内存分配原则

Java把内存划分成两种:一种是栈内存,一种是堆内存。    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。    当在一段代码块定义一个变量时,Java就在栈中为这个变...

List容器内存分配原则

 当采用默认构造函数List value = new List();实例化一个List对象时,.Net Framework只是在内存中申请了一块内存来存放List对象本身(不包含List当中的I...
  • daone
  • daone
  • 2014年01月13日 13:36
  • 564

浅谈结构体及linux下内存分配原则

结构体在程序中的应用是很广泛的,要处理的问题越复杂,数据量越多越杂,就越需要用到结构体。比如网络,内核,驱动等等。熟练使用结构体对每个程序员都是至关重要的。一个好的结构体不仅能使程序体系结构清晰,而且...

【Java JVM】Java虚拟机内存分配几个原则

1、大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC 2、大对象直接进入老年代。大对象指需要大量连续内存空间的Java对象,最典型的大对...

JAVA虚拟机内存分配原则

Java把内存划分成两种:一种是栈内存,一种是堆内存。    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。    当在一段代码块定义一个变量时,Java就在栈中...

Java虚拟机7:内存分配原则

前言 对象的内存分配,往大的方向上讲,就是在堆上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存相关...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程习惯:提供内存分配的成对原则
举报原因:
原因补充:

(最多只允许输入30个字)