关于static你可能不知道的事

来源:互联网 发布:逍遥游软件下载 编辑:程序博客网 时间:2024/05/20 04:47

转载请注明出处

作者:小马


关于static变量的用法, 网上有很多了. 比如在C里实现的隐藏机制, c++里的作用域等. 我这里要讨论的不是这些. 主要是我今天在修改公司以前的一些代码时,悟出的一些道理. 用两个函数进入正题:

char *ReturnMem_static(char *test){       static char temp[100] = {0};       memcpy(temp, test, strlen(test));       return temp;}char *ReturnMem_new(char *test){       char *temp = new char[100];       memset(temp, 0, 100);       memcpy(temp, test, strlen(test));       return temp;}


 

首先, 你应该清楚的认识到上面两个函数都是没有问题的。


我在调试代码时,把第一个函数的一段代码,改成了第二个函数那样的版本. 我当时的想法是第二个函数版本比较灵活,我可以控制内存分配, new 内存当我不用时可以自己delete掉,不会浪费内存空间.改完后,下到板子里测试,运行结果没问题,但明显感到程序运行慢了很多. 要分析这个原因,就要看看

ReturnMem被调用的地方:


void Test(char *testString){       char init[100];       for (int i = 0; i < 10000; i++)       {              memcpy(init, ReturnMem_static(testString), 100);       }}


用动态分配的代码:

void Test(char *testString){       char init[100];       for (int i = 0; i < 10000; i++)       {              memcpy(init, ReturnMem_new(testString), 100);       }}


明白人一看就知道为什么程序运行会慢了, 原代码10000次用的都是同一个100 byte空间的大小, 而我修改后的代码一共用掉了100*10000 byte的空间(我那开发板可受不了这个)

其实, 也可以修改Test函数, 用ReturnMem_new版本的调用, 每次调用完及时用delete释放, 但是这样有三点不好,一是程序结构不好, 二是对于大型的代码,这样做太繁琐. 三,也是最重要的一点,代码的效率非常低.

用掉微不足道的一点空间,换来的是简洁高效的代码, 值了.

 

原创粉丝点击