问题:内存分配 & sizeof
我使用sizeof来计算一个指针变量,我希望得到这个指针变量所分配的内存块的大小,可以吗?
Char *p = NULL; int nMemSize = 0; … p = malloc(1024); nMemSize = sizeof(p); |
答案与分析: 答案是达不到你的要求,sizeof只能告诉你指针本身占用的内存大小。指针所指向的内存,如果是malloc分配的,sizeof 是没有办法知道的。换句话说,malloc分配的内存是没有办法向内存管理模块进行事后查询的,当然你可以自己编写代码来维护。
问题:栈内存使用
下面程序运行有什么问题?
char *GetString(void) { char p[] = "hello world"; return p;// 编译器将提出警告 }
void Test4(void) { char *str = NULL; str = GetString();// str 的内容是垃圾 cout<< str << endl; } |
答案与分析: 返回栈内存,内存可能被销毁,也可能不被销毁,但是,出了作用域之后已被标记成可被系统使用,所以,乱七八糟不可知内容,当然,返回的指针的内容,应该是不变的,特殊时候是有用的,比如,可以用来探测系统内存分配规律等等。
问题:内存使用相关编程规范
我想尽可能地避免内存使用上的问题,有什么捷径吗?
答案与分析: 除非做一件从没有人做过的事情,否则,都是有捷径可言的,那就是站在前人的肩膀上,现在各个大公司都有自己的编码规范,这些规范凝聚了很多的经验和教训,有较高的使用价值,鉴于这些规范在网上流传很多,这里我就不再列出了,感兴趣的,推荐参考林锐的《高质量C/C++编程指南》。
查看本文来源