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