当前位置:网站首页>【C语言指针】用指针提升数组的运算效率
【C语言指针】用指针提升数组的运算效率
2022-08-05 10:28:00 【SN-Grotesque】
原本代码
static void test()
{
size_t size = 500 * pow(1024, 2);
uint8_t *data = (uint8_t *)malloc(size);
size_t x;
clock_t start, end;
start = clock();
for(x = 0; x < size; ++x) {
data[x] = 0x41;
}
end = clock();
printf("%lf seconds\n",(double)(end - start) / CLOCKS_PER_SEC);
}
经过十次的执行,取平均值为1.9628
秒
修改后代码
static void test()
{
size_t size = 500 * pow(1024, 2);
uint8_t *data = (uint8_t *)malloc(size);
size_t x;
clock_t start, end;
start = clock();
for(x = 0; x < size; ++x) {
*data = 0x41;
data++;
}
end = clock();
printf("%f seconds\n",(double)(end - start) / CLOCKS_PER_SEC);
}
经过十次执行,取平均值为1.8914
秒
可以看到平均下来指针比使用下标的方式要快上近
0.1
秒,你可能会说就100毫秒有啥好优化的。
那是因为你接触到的项目不够大,如果在一个大型项目上面还是只使用数组下标的话,就比较容易导致整个项目的节奏被某些函数或运算给拖后腿。
最后如果你是一个不够了解指针或C语言的人可能会注意到一个现象。
那就是后续使用printf函数无法输出上面这个data
变量,输出结果是什么也没有。
那是因为指针已经指向了这个变量的最后一个值的下一个值。
简单来说就是p = data[(n - 1) + 1];
p是指针指向的值,n是变量长度。
要解决这个问题只需要使用另一个指针来在一开始指向这个data变量,然后后续的运算都用此新指针。
边栏推荐
- Where is your most secretive personality?
- 开发常用手册链接分享
- The JVM collection that Alibaba's top architects have summarized for many years, where can't I check it!
- 数据中台建设(十):数据安全管理
- 深入理解 Istio 流量管理的超时时间设置
- Development common manual link sharing
- 字节一面:TCP 和 UDP 可以使用同一个端口吗?
- 012年通过修补_sss_提高扩散模型效率
- 第五章:activiti流程分流判断,判断走不同的任务节点
- Microcontroller: temperature control DS18B20
猜你喜欢
GPU-CUDA-图形渲染分析
DFINITY 基金会创始人谈熊市沉浮,DeFi 项目该何去何从
产品太多了,如何实现一次登录多产品互通?
E-sports, convenience, efficiency, security, key words for OriginOS functions
SQL Outer Join Intersection, Union, Difference Query
[强网杯2022]WP-UM
Login function and logout function (St. Regis Takeaway)
PCB布局必知必会:教你正确地布设运算放大器的电路板
什么是 DevOps?看这一篇就够了!
阿里顶级架构师多年总结的JVM宝典,哪里不会查哪里!
随机推荐
RT - Thread record (a, RT, RT Thread version - Thread Studio development environment and cooperate CubeMX quick-and-dirty)
【翻译】混沌网+SkyWalking:为混沌工程提供更好的可观察性
力扣(LeetCode)216. 组合总和 III(2022.08.04)
Getting started with Polkadot parachain development, this article is enough
SMB + SMB2: Accessing shares return an error after prolonged idle period
我们的Web3创业项目,黄了
PCB布局必知必会:教你正确地布设运算放大器的电路板
第五章:activiti流程分流判断,判断走不同的任务节点
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
SQL Outer Join Intersection, Union, Difference Query
Jenkins manual (2) - software configuration
秘乐短视频挖矿系统开发详情
The founder of the DFINITY Foundation talks about the ups and downs of the bear market, and where should DeFi projects go?
数据可视化(一)
60行从零开始自己动手写FutureTask是什么体验?
Brief Analysis of WSGI Protocol
如何选币与确定对应策略研究
LeetCode 216. Combined Sum III (2022.08.04)
入门 Polkadot 平行链开发,看这一篇就够了
NowCoderTOP35-40——持续更新ing