JavaScript is required to for searching.
跳过导航链接
退出打印视图
编程接口指南     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  内存和 CPU 管理

内存管理接口

创建和使用映射

删除映射

高速缓存控制

使用 mincore

使用 mlockmunlock

使用 mlockallmunlockall

使用 msync

库级别动态内存

动态内存分配

动态内存调试

check -access

check -leaks [-frames n ] [-match m]

check -memuse [-frames n] [-match m]

check -all [-frames n] [-match m]

check [funcs ] [files ] [loadobjects]

其他内存控制接口

使用 sysconf

使用 mprotect

使用 brksbrk

CPU 性能计数器

libcpc 中添加的 API

初始化接口

硬件查询接口

配置接口

绑定

抽样

缓冲区操作

激活接口

错误处理接口

2.  用于 Solaris Cluster 的远程共享内存 API

3.  会话描述协议 API

4.  进程调度程序

5.  地址组 API

6.  输入/输出接口

7.  进程间通信

8.  套接字接口

9.  使用 XTI 和 TLI 编程

10.  包过滤钩子

11.  传输选择和名称到地址映射

12.  实时编程和管理

13.  Solaris ABI 和 ABI 工具

A.  UNIX 域套接字

索引

库级别动态内存

库级别动态内存分配为动态内存分配提供了一个易于使用的接口。

动态内存分配

最常用的接口包括:

其他动态内存分配接口包括 memalign(3C)valloc(3C)realloc(3C)

动态内存调试

Sun WorkShop 工具包有助于查找和消除在使用动态内存时出现的错误。Sun WorkShop 的运行时检查 (Run Time Checking, RTC) 工具使用本节中介绍的函数来查找使用动态内存时的错误。

RTC 不需要使用 -g 对程序进行编译,即可查找所有错误。不过,有时需要符号 (-g) 信息,以保证某些错误(尤其是从未初始化内存中读取的错误)的正确性。因此,如果没有可用的符号信息,则某些错误会受到抑制。这些错误包括 rui(针对 a.out)和 rui + aib + air(针对共享库)。可以使用 suppressunsuppress 来更改此行为。

check -access

-access 选项可用于启动访问检查。RTC 会报告以下错误:

baf

可用项错误

duf

可用项重复

maf

可用项排列错误

mar

读取排列错误

maw

写入排列错误

oom

内存不足

rua

从未分配的内存读取

rui

从未初始化的内存读取

rwo

写入到只读内存

wua

写入到未分配的内存

缺省行为是在检测到每个访问错误之后停止进程。可以使用 rtc_auto_continue dbxenv 变量更改此行为。如果设置为 on,则 RTC 会将访问错误记录到一个文件中。此文件名由 rtc_error_log_file_name dbxenv 变量的值确定。缺省情况下,仅在每个唯一的访问错误首次发生时报告该错误。可使用 rtc_auto_suppress dbxenv 变量更改此行为。此变量的缺省设置为 on

check -leaks [-frames n ] [-match m]

-leaks 选项可启用泄漏检查。RTC 会报告以下错误:

aib

可能发生内存泄漏-唯一指针指向块中间位置

air

可能发生内存泄漏-指向块的指针仅存在于寄存器中

mel

内存泄漏-无指向块的指针

启用泄漏检查后,在程序退出时会获取自动生成的泄漏报告。此时会报告包括潜在泄漏在内的所有泄漏。缺省情况下,将生成非详细报告。此缺省行为由 dbxenv rtc_mel_at_exit 控制。不过,可以随时要求提供泄漏报告。

报告泄漏时,-frames n 变量最多可显示 n 个不同的栈帧。-match m 变量用于合并泄漏。如果进行分配时两个或多个泄漏的调用栈与 m 个帧匹配,则会在单个合并的泄漏报告中报告这些泄漏。n 的缺省值为 8 或 m 值之间的较大者。n 的最大值为 16。m 的缺省值为 2。

check -memuse [-frames n] [-match m]

-memuse 选项可启用内存使用 (memuse) 检查。使用 check -memuse 即表示使用 check -leaks。除程序退出时获取泄漏报告之外,您还会获得一个列出使用中的块 (biu) 的报告。缺省情况下,将生成有关使用中的块的非详细报告。此缺省行为由 dbxenv rtc_biu_at_exit 控制。在程序执行过程中,可随时查看程序中的内存所分配到的位置。

-frames n-match m 变量的作用如下节所述。

check -all [-frames n] [-match m]

check -accesscheck -memuse [-frames n] [-match m] 等效。rtc_biu_at_exitdbxenv 变量的值不会随 check -all 进行更改。因此,缺省情况下,退出时不会生成任何内存使用报告。

check [funcs ] [files ] [loadobjects]

funcs files loadobjects 中的 check -allsuppress allunsuppressall 等效。使用此选项可以将 RTC 重点用于所需的位置。

其他内存控制接口

本节讨论其他内存控制接口。

使用 sysconf

sysconf(3C) 可用于返回与系统相关的内存页的大小。为便于移植,应用程序不应嵌入用于指定页面大小的任何常量。请注意,即使在相同指令集的执行中,变化的页面大小也很常见。

使用 mprotect

mprotect(2) 可用于为指定地址范围内的所有页面分配指定的保护。保护不能超出底层对象所允许的权限。

使用 brksbrk

中断点 (break) 是进程映像中栈外部的最大的有效数据地址。程序开始执行时,execve(2) 通常会将中断点 (break) 值设置为程序及其数据存储所定义的最大地址。

使用 brk(2) 可将中断点 (break) 设置为更大的地址。您还可以使用 sbrk(2) 向进程的数据段中添加一个存储增量。通过调用 getrlimit(2) 可以获取数据段的最大可能大小。

caddr_t
brk(caddr_t addr);

caddr_t
sbrk(intptr_t incr);

brk 可用于将调用者未使用的最低数据段位置标识为 addr。此位置会向上舍入为系统页面大小的下一个倍数。

备用接口 sbrk 可用于向调用者数据空间中添加 incr 个字节,并返回指向新数据区域开头的指针。