优先级问题 | 表达式 | 人们可能误以为的结果 | 实际结果 |
.的优先级高于* ->操作符用于消除这 个问题 | *p.f |
p所指向的字段f (*p).f | 对p取f的偏移,作为指针然后进行解引用操作。*(p.f) |
[]高于* |
int *ap[] 指针数组 | ap是指向int数组的指针int(*ap)[] | ap是元素为int指针的数组int*(ap[]) |
函数()高于* | int *fp()指针函数 | fp是函数指针,所指函数返回int |
fp是个函数,返回int* int*(fp()) |
==和!=高于位操作符 | (val&mask!=0) | (val7mask)!=0 | val&(mask!=0) |
==和!=高于赋值符 | c=getchar()!=EOF | (c=getchar())!=EOF |
c=(getchar()!=EOF) |
算术运算符高于移位运算符 | msb<<4+lsb | (msb<<4)+lsb | msb<<(4+lsb) |
逗号运算符在所有运算符中的优先级最低 | i=1,2 | i=(1,2) | (i=1),2 |
观察内存泄露是一个两步骤的过程,首先,使用swap命令观察还有多少可用的交换空间:
/usr/sbin/swap -s
total: 17228k bytes allocated + 5396k reserved = 2262k used,29548k available
在一分钟内键入该命令三到四次,看看可用的交换区是否在减少。还可以使用其他一些/usr/sbin/*stat 工具如netstat、vmstat等。如果发现不断有内存被分配且从不释放,一个可能的解释就是有个进程出现了内存泄漏。