关于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释放, 但是这样有三点不好,一是程序结构不好, 二是对于大型的代码,这样做太繁琐. 三,也是最重要的一点,代码的效率非常低.
用掉微不足道的一点空间,换来的是简洁高效的代码, 值了.
- 关于static你可能不知道的事
- 关于xargs,你可能不知道的
- 关于startActivityForResult你可能不知道的
- 关于iPhone,你可能不知道的
- 关于Google你可能不知道的10件事
- 关于PHP你可能不知道的10件事
- 关于PHP你可能不知道的10件事
- 关于PHP你可能不知道的10件事
- 关于JavaScript你可能不知道的事 1 - 5
- 关于PHP你可能不知道的10件事
- 关于邵逸夫:你可能不知道的8件事
- 关于Go,十件你可能不知道的事
- 关于Java你可能不知道的10件事
- 关于Promise:你可能不知道的6件事
- ES6 你可能不知道的事
- ES6 你可能不知道的事
- 你可能不知道的
- 关于DataSet你可能不知道的一件事情
- Accept-Encoding: gzip,deflate
- 敏捷开发之OCP原则的思考
- CString, int, string, char*之间的转换
- Incomplete Type问题
- 位运算的应用
- 关于static你可能不知道的事
- Oracle的聚簇表
- 世界上最小的 MP3 Web 播放器
- Wince 流接口驱动
- symbian 显示位图和SVG图
- 抓取数据的时候,必须登陆吗
- YUV viewer using GraphEdit
- 献辞
- set和record数据类型的区别