科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件水滴石穿C语言之内存使用

水滴石穿C语言之内存使用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

内存是一种重要的资源,在编程中对内存的使用不当,将导致程序崩溃。

作者:楚云风 来源:天极网 2007年10月28日

关键字: Linux

  • 评论
  • 分享微博
  • 分享邮件
问题:内存分配 & 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++编程指南》。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章