发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 如何加快慢指针数学?
148 存储 内存
分享
typedef struct{int32_t.[101];float value[101];}lut_key_vals;typedef struct{lut_key_vals.[3];float celsius[3];}._lut_key_vals;._lut_key_vals.[3];....((.[idx1];.[idx2]<target_val)&&(idx<101))……这个循环是{idx++}。每循环大约1USEC…我在40MHz的PIC32 MX上,我用指针数学自杀了吗?有没有办法迫使“内部”分组在内存中相邻?映射文件中列出的基本地址是: 0xa000c450....所以我假设表中的所有内容都存储在易于引用的32位边界上。对如何加快这项搜索有什么建议吗?它将被转换为二进制搜索,所以请不要回复,我正在寻找一种方法来加快基本获取和比较。有人认为我必须创建一个:union{float f; in t 3 2_t i i;}lut[((101*2)+3)*3];自己处理组织,但是代码的可读性/可维护性指数下降……预先感谢!
0
2019-11-6 10:33:19   评论 分享淘帖 邀请回答
19个回答
40条指令(最多)与这种结构没有多大关系。为了加速这种结构,我建议从外部[…]、中间[…]创建一个指针——将while控制变量减少到ptr->内部[idx]。
2019-11-6 10:38:43 评论

举报

我可以想到指向数组的指针,而不是通过索引访问数组…
2019-11-6 10:52:48 评论

举报

我认为浮动比较可能需要一段时间。用整数替换浮点数。如果在1000度下测量,32位整数对于大约200万度的范围来说是好的。
2019-11-6 11:12:18 评论

举报

2019-11-6 11:17:47 评论

举报

我看不到上面的片段中使用的浮动,也许它们在*之后发挥作用?
2019-11-6 11:28:03 评论

举报

这是正确的。我看到不存在的东西:
2019-11-6 11:46:15 评论

举报

你也看到死人了吗???????(或者你还不够大,不知道参考!)苏珊
2019-11-6 12:02:36 评论

举报

我想这是在-0。任何更高的优化级别都应该比这快得多。但是,大约是速度的两倍。顺便说一下,您的代码包含一个相当隐蔽的bug。行应该是。实际上,在检查idx<101之前,代码尝试访问数组元素外部[idx1]、[idx2]、内部[101]。这可能导致异常。
2019-11-6 12:12:24 评论

举报

在大数组中加速搜索的一种技术是用满足搜索条件的值替换数组中的最后一个值。这导致了一个紧凑的搜索循环,因为您不需要检查IDX值。我没有测试代码,但它显示了总体思路。
2019-11-6 12:30:00 评论

举报

看看这个“老练的电脑程序员”在这个笑话中的词条,和山里一样古老!,HTTPS://www.物理,Bu.EdU/Fulult/CaltON/Pooals/Jooks/JooksEnthang.HTML
2019-11-6 12:40:58 评论

举报

所以Tr.StrueLy:我因为“电话”而笑了。
2019-11-6 12:58:42 评论

举报

@simong123感谢对.()-O3顺序的捕获,它确实将执行时间缩短了一半……接下来我将使用指针,但我厌倦了编译器的存储规则可能让ptr++指向交替的“内部”键和“值”,因为最里面的结构是:typedef struct{int32_t.[101];float value[101];}lut_key_vals;...我假定..[5]和.value[5]位于连续的内存位置,是否有为此设置的编译器规则,或者它们是特定于供应商的?@qhb——这是我的第一个想法,重新设计数据结构,以便搜索是最容易的事情,这是我一直试图避免的头疼,但它可能是前进的最佳路径。PS: @澳洲苏珊,我不是第六感的粉丝,我更像是布鲁斯·威利斯/哈德逊老鹰粉丝……
2019-11-6 13:07:17 评论

举报

然后你会假设错误。C数组总是在连续的内存位置中实现。*(内+ 5)= =内[ 5 ]。事实上,它在一个结构中是不相干的。为了交错,你必须:谷歌SOA和AOSEDIG:在我的测试中,你的EXMEL代码在-O1快了7X,不知道为什么你只在-O3上看到2X加速。
2019-11-6 13:18:08 评论

举报

条件句的使用和评价一直是从左到右的情况吗?我做了一些调查搜集证据来驳斥你的要求,但我发现你是正确的。我可以发誓我读过,评价的顺序是不明确的。也许是K & R:-比尔
2019-11-6 13:26:25 评论

举报

订单通常并不重要。只有少数例外,比如“&”,“|”:“这是有原因的。在左边的操作数被赋值之后,该值可能等于右边的操作数根本不赋值。例如:如果do_it_right()赋值到非零.()将不执行。这就是sa。我是:
2019-11-6 13:42:57 评论

举报

“短路”被称为“我是对的吗?”是的,如果左操作数“完成”计算,其余部分根本不被评估。
2019-11-6 14:02:46 评论

举报

对。条件句是从左到右进行评估的,只要结果不含糊,评价就停止。这通常称为短路计算。这通常用于指针检查和字符串/数组边界检查。例如,指针。在实际评估指向什么之前检查NULL指针,避免由于NULL指针而导致异常的可能性。混淆了条件评价和数学评价,其顺序对于同一性操作者是不确定的。
2019-11-6 14:16:13 评论

举报

嗯,我会咧嘴笑:我通常在论坛上学习新的东西,但我不认为我会学习基本的C结构。我在C已经编码了30年,并认为我知道所有的一切。我脑海中浮现的是思考如何简单(更短?)我的代码可能已经这么多年了。也就是说,下面的代码:可能编译成与:无论如何。谢谢你提供的信息!-比尔
2019-11-6 14:24:04 评论

举报

“短路”是一个很美的短语,你不能忘记它。
2019-11-6 14:38:54 评论

举报

只有小组成员才能发言,加入小组>>

75个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /5 下一条

快速回复 返回顶部 返回列表