java – Delphi并发内存模型?

前端之家收集整理的这篇文章主要介绍了java – Delphi并发内存模型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有什么像Delphi中的 Java Memory Model吗?为了防止误会:我的意思是没有像“巨大/大/小”,而是与其他线程的更改的可见性相关的事情.

解决方法

我会说Delphi内存模型与C内存模型相匹配.也就是说,编译器不知道多个进程或多个线程,并且不为这些情况提供任何特殊支持.见 “What is the C++ memory model for concurrency?”

Delphi 32位编译器执行优化,如不变代码运动,并发出指令序列,以避免停止双管道.然而,Delphi编译器不包含指令调度程序或窥视孔优化器,因此指令重新排序的机会很小.在指令发出之前,AST / IR上发生Delphi优化.

局部变量可以被注册,但是对于需要内存地址的变量(例如将本地变量传递给var param或者使用本地变量的地址)的任何源代码引用将强制编译器将注册的值提交到在使用地址之前的内存位置,或者可能迫使编译器完全放弃注册变量.

Delphi 32位编译器在优化方面相当保守.优化中最大的性能提升来自于注册变量和中间结果,以及各种循环感应技巧.

全局符号或驻留在全局内存中的符号(如对象字段)的操作不会被注册.没有“volatile”修饰符.

编译器代码模式依赖于x86架构规则,对齐地址的注册大小写入全局内存是原子的.大数据,字节数据或未对齐地址的写入可能会跨越高速缓存行,并需要在单个写指令内进行两次单独的写操作. Delphi编译器(主要是)忽略了这一点.

无论如何,如果您正在编写从不同线程访问共享内存的Delphi代码,始终有责任决定什么线程同步措施适合您的情况并实现它们.

原文链接:https://www.f2er.com/java/122969.html

猜你在找的Java相关文章