使用动态分配的内存
许多程序依赖于动态分配的内存,它们使用诸如以下各项的功能:
malloc、valloc 和 alloca (C/C++)
new (C++)
堆栈局部变量 (Fortran)
MALLOC 和 MALLOC64 (Fortran)
必须小心确保程序不依赖于动态分配的内存的初始内容,除非内存分配方法明确地说明要设置初始值:例如,比较 malloc(3C) 手册页中对 calloc 和 malloc 的描述。
偶尔,使用动态分配的内存的程序似乎可以单独地正常运行,但是启用性能数据收集之后就会失败。症状可能包括意外的浮点行为、段故障或特定于应用程序的错误消息。
如果应用程序单独运行时未初始化的内存偶然设置为良性值,但应用程序与性能数据收集工具一起运行时未初始化的内存被设置为其他值,则会出现这种行为。发生这种情况时,问题不出在性能工具上。依赖于动态分配的内存内容的任何应用程序都具有潜在的错误:除非明确说明使用其他方式,否则操作系统将为动态分配的内存随机提供任意内容。即使目前操作系统会始终将动态分配的内存设置为某个值,但是将来在使用操作系统的后续修订版或将程序移植到其他操作系统时,这些潜在的错误会引起意外的行为。
下列工具可以帮助您找到这些潜在的错误:
f95 -xcheck=init_local
有关更多信息,请参见《Fortran 用户指南》或 f95(1) 手册页。
lint 实用程序
有关更多信息,请参见《C 用户指南》或 lint(1) 手册页。
dbx 下的运行时检查
有关更多信息,请参见《使用 dbx 调试程序》手册或 dbx(1) 手册页。
Rational Purify