根据编程语言的不同, 对堆用的内存空间进行申请分配和释放的程序的编写方法也是多种多样的。C语言中是通过malloc()函数来进行申请分配、通过free()函数来释放的。 而C++中则是通过new运算符来申请分配、通过delete运算符来释放的。 无论是C语言还是C++,如果没有在程序中明确释放堆的内存空间, 那么即使在处理完毕后,该内存空间仍会一直残留。 这个现象称为内存泄露(memoryleak),它是令C语言及C++的程序员们十分头疼的一个bug (程序的错误)。如果内存泄露一直存在的话, 就有可能会造成内存不足而导致宕机。这就好比,如果水龙头一直嘀嗒嘀嗒地漏水, 那么一晚上的时间水桶就可能会装满并溢出。
Q:编译器和解释器有什么不同?
A:编译器是在运行前对所有源代码进行解释处理的。而解释器则是在运行时对源代码的 内容一行一行地进行解释处理的。
Q:“分割编译”指的是什么?
A:将整个程序分为多个源代码来编写, 然后分别进行编译,最后链接成一个EXE文件。 这样每个源代码都相对变短, 便于程序管理。
Q:“Build”指的是什么?
A:根据开发工具种类的不同, 有的编译器可以通过选择“Build”菜单来生成EXE文件。这种情况下, Build指的是连续执行编译和链接。
Q:使用DLL文件的好处是什么?
A:DLL文件中的函数可以被多个程序共用。 因此,借助该功能可以节约内存和磁盘。此外, 在对函数的内容进行修正时,还不需要重
新链接(静态链接)使用这个函数的程序
Q:不链接导入库的话就无法调用 DLL文件中的函数吗?
A:通过使用LoadLibrary()及 GetProcAddress()这些API,即使不链接导入库,也可以在程序运行时调用 DLL文件中的函数。不过使用导人库更简单一些。
Q:“叠加链接”这个术语指的是什么?
A:将不会同时执行的函数,交替加载到同 一个地址中运行。通过使用“叠加链接器” 这一特殊的链接器即可实现。 在计算机中配置的内存容量不多的MS-DOS时代,经常使用叠加链接。
Q:和内存管理相关的“垃圾回收机制” 指的是什么呢?
A:垃圾回收机制(garbage collection) 指的是对处理完毕后不再需要的堆内存空间的数据和对象进行清理, 释放它们所使用的内存空间。这里把不需要的数据比喻为了垃圾。 进行该处理时,C语言用的是free()函数,C++用的是delete运算符。 在C++的基础上开发出来的Java及C#这些编程语言中, 程序运行环境会自动进行垃圾回收。这样就可以避免由于程序员的疏忽( 忘了记述内存的释放处理)而造成内存泄露了。