我有个问题….
我正在while循环中将数据写入数组.关键是我经常这样做.似乎这篇文章现在是代码中的瓶颈.所以我认为它是由写入内存引起的.这个数组不是很大(像300个元素一样).问题是可以这样做:将它存储在缓存中并仅在while循环完成后才在内存中更新?
我正在while循环中将数据写入数组.关键是我经常这样做.似乎这篇文章现在是代码中的瓶颈.所以我认为它是由写入内存引起的.这个数组不是很大(像300个元素一样).问题是可以这样做:将它存储在缓存中并仅在while循环完成后才在内存中更新?
[编辑 – 复制自Alex添加的答案]
double* array1 = new double[1000000]; // this array has elements unsigned long* array2 = unsigned long[300]; double varX,t,sum=0; int iter=0,i=0; while(i<=max_steps) { varX+=difX; nm0 = int(varX); if(nm1!=nm0) { array2[iter] = nm0; // if you comment this string application works more then 2 times faster :) nm1=nm0; t = array1[nm0]; // if you comment this string,there is almost no change in time ++iter; } sum+=t; ++i; }
首先,我要感谢你们所有人的回答.实际上,不放置代码有点蠢.所以我现在决定这样做.
double* array1 = new double[1000000]; // this array has elements unsigned long* array2 = unsigned long[300]; double varX,there is almost no change in time ++iter; } sum+=t; ++i; }
就是这样.如果有人有任何想法会很好.再一次非常感谢你.
诚挚
亚历克斯
解决方法
不是故意的,没有.除此之外,你不知道缓存有多大,所以你不知道什么是适合的.此外,如果允许应用程序锁定部分缓存,则对操作系统的影响可能会对整体系统性能造成破坏.这完全属于我的“你不能这样做,因为你不应该这样做.永远.”
你可以做的是改善你的引用位置 – 尝试安排循环,这样你就不会多次访问这些元素,并尝试在内存中按顺序访问它们.
如果没有关于您的申请的更多线索,我认为不能给出更具体的建议.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。