当前位置:网站首页>【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变量,然后后续的运算都用此新指针。
边栏推荐
- three.js调试工具dat.gui使用
- 数分面试(一)----与业务相关
- 基于MindSpore高效完成图像分割,实现Dice!
- 华为轻量级神经网络架构GhostNet再升级,GPU上大显身手的G-GhostNet(IJCV22)
- 第六章:activiti流程分流判断之排它网关和并行网关
- R语言使用yardstick包的pr_curve函数评估多分类(Multiclass)模型的性能、查看模型在多分类每个分类上的ROC曲线(precision(精准率),R代表的是recall(召回率)
- 【MindSpore易点通机器人-01】你也许见过很多知识问答机器人,但这个有点不一样
- Is digital transformation a business buy-in?
- The century-old Nordic luxury home appliance brand ASKO smart wine cabinet in the three-temperature area presents the Chinese Valentine’s Day, and tastes the love of the delicacy
- Introduction to SD NAND Flash!
猜你喜欢
NowCoderTOP35-40 - continuous update ing
Complete image segmentation efficiently based on MindSpore and realize Dice!
数据可视化(二)
NowCoderTOP35-40——持续更新ing
High-quality DeFi application building guide to help developers enjoy DeFi Summer
012_SSS_ Improving Diffusion Model Efficiency Through Patching
气象数据数据处理实例——matlab字符串切割匹配与R语言日期匹配(数据拼接)
单片机:温度控制DS18B20
教你本地编译运行一个IDEA插件,在IDEA里聊天、下棋、斗地主!
Leetcode刷题——623. 在二叉树中增加一行
随机推荐
MySQL transactions
Confessing in the era of digital transformation: Mai Cong Software allows enterprises to use data in the easiest way
PHP operation mangoDb
NowCoderTOP35-40——持续更新ing
Chapter 4: activiti RuntimeService settings get and get process variables, and the difference from taskService, set process variables when starting and completing tasks [easy to understand]
static linking and dynamic linking
一文道清什么是SPL
What is SPL?
Introduction to SD NAND Flash!
RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手)
[Android] How to use RecycleView in Kotlin project
three objects are arranged in a spherical shape around the circumference
阿里顶级架构师多年总结的JVM宝典,哪里不会查哪里!
R语言使用yardstick包的pr_curve函数评估多分类(Multiclass)模型的性能、查看模型在多分类每个分类上的ROC曲线(precision(精准率),R代表的是recall(召回率)
深入理解 Istio 流量管理的超时时间设置
创建一个 Dapp,为什么要选择波卡?
静态链接和动态链接
Our Web3 Entrepreneurship Project, Yellow
R语言ggplot2可视化:可视化密度图(Density plot)、可视化多个分组的密度图、数据点分布在箱图中间、添加主标题、副标题、题注信息
poj2287 Tian Ji -- The Horse Racing(2016xynu暑期集训检测 -----C题)