1.
linux 优先运用物理内存,当物理内存还有空闲时,linux是不会施放内存
的,即使占用内存的程序已经被关闭了(这部分内存就用来做缓存了)。也就
是说,即时你有2G的内存,用过一段时间后,也会被占满。这样做的裨益是,启
动那些刚开启过的程序、或是读取刚存取过得数据会比较快,对于服务器很有
裨益。
用 used 减去 buffer 和 cache,才是运行中的程序所占用的空间
2
mmap函数申请的内存是从虚拟内存中分配的,而非物理内存。
3
用malloc函数申请的内存,用free释放后,指针并不为NULL。从搜到的资料看,说free后指针不为NULL,但是指针指向的内存已经被释放,但是我在centos6.3下测试,发现free后还是能输出原先的字符串。但指针不为NULL这个是肯定的。代码如下:
int main()
{
char * str = NULL;
str = (char *) malloc(100);
strcpy(str, "hello");
free(str);
if (str != NULL){
printf("%s\n", str);
strcat(str, "world");
printf("%s\n", str);
}
return 0;
}
运行结果:
# ./a.out
hello
helloworld
#
先不理会这个结果在其他机器上是不是会不一样,但是在使用free时要切记使指针赋值为NULL,防止野指针,delete也如此。
free(str);
str = NULL;
4
用malloc分配的内存,如果操作的时候越界了,用free释放的时候会报错,而注释掉free就不报错,这种情况不注意就不知道是越界操作的原因.