使用pthread时,使用全局变量的C显示比指针慢100%?
|
我有一个很好的程序来显示2个类似程序的性能,它们都使用2个线程来进行计算.核心区别在于,一个使用全局变量,另一个使用“新”对象,如下所示:
它很慢,然后我修改了obj以动态创建(我预计它会更慢):
它比前一个快100%.我也试过linux,同样的结果. 为什么差异呢,你可能会问? 因为计数变量!由于这是一个变量,并且size_t的基础类型对您来说很长,编译器无法对其进行优化(因为pl可能指向计数).如果count是一个int,由于严格的别名规则,编译器可以优化它(或者只是它可以是const size_t). 因此生成的代码必须每次在循环中读取计数. 在第一个示例中,count和obj两个全局变量,它们彼此靠近.因此,链接器很可能将这些变量放入同一缓存行中.因此,写入obj.a或obj.b将使计数的缓存行无效.因此CPU必须同步读取计数. 在第二个例子中,obj被分配在堆上,它的地址将远离count,因此它们不会占用相同的缓存行.计数不需要同步. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 如何在vim中递归使用模式打开文件
- linux – iwconfig – 通过wifi在终端上连接网络
- linux – 以root身份运行我的crontab作业是否存在安全风险?
- vsftp 500 OOPS: cannot change directory:/home/xyp
- linux – 如果wget的进展该怎么办:mega不再削减它了?
- gpg –import失败,没有找到有效的OpenPGP数据
- 大(27GB)文件的grep功能更快
- 如何防止rsync用目标目录层次结构中的新目录替换符号链接?
- linux – grep仅匹配指定范围内的行
- linux – 了解服务–status-all输出
