D中的属性开销是多少(如果有的话)?

D中的属性开销是多少(如果有的话)?,d,encapsulation,micro-optimization,D,Encapsulation,Micro Optimization,我应该公开我的一些课堂数据,但它预计会在生产力要求非常高的领域工作,所以我自然想知道,这样做的最佳方式是什么:坚持设计原则,通过属性进行阐述,还是忘记它,只公开我的数据 属性是一个函数调用,但它通常是一个可以内联的普通调用。。。。至少只要它是最终的,并且您使用了正确的编译器设置(gdc-O或ldc的优化。一个快速测试向我显示dmd-inline并没有内联它!) 所以现在,如果您使用的是gdc或ldc,那么最终的属性是免费的,因为它将被内联和优化。一个我不确定的虚拟财产功能。如果您使用dmd,函数

我应该公开我的一些课堂数据,但它预计会在生产力要求非常高的领域工作,所以我自然想知道,这样做的最佳方式是什么:坚持设计原则,通过属性进行阐述,还是忘记它,只公开我的数据

属性是一个函数调用,但它通常是一个可以内联的普通调用。。。。至少只要它是最终的,并且您使用了正确的编译器设置(gdc-O或ldc的优化。一个快速测试向我显示dmd-inline并没有内联它!)


所以现在,如果您使用的是gdc或ldc,那么最终的属性是免费的,因为它将被内联和优化。一个我不确定的虚拟财产功能。如果您使用dmd,函数调用的成本很小,因此如果它是一个紧循环,您可能会通过一个公共字段获得加速。

属性是一个函数调用,但它通常是一个可以内联的小函数调用。。。。至少只要它是最终的,并且您使用了正确的编译器设置(gdc-O或ldc的优化。一个快速测试向我显示dmd-inline并没有内联它!)


所以现在,如果您使用的是gdc或ldc,那么最终的属性是免费的,因为它将被内联和优化。一个我不确定的虚拟财产功能。如果您使用的是dmd,则函数调用的成本很小,因此如果它是一个紧循环,您可能会在公共字段中获得加速。

它在公共“接口”上的库代码中有意义。无法链接D Exe,因此没有要断开的接口。在D中,您主要使用静态链接(使用所有源代码编译一个二进制blob),因此没有太多理由包装数据访问-当某些内容被破坏时,编译器会抱怨。我想到的唯一一个可能会有不同表现的问题是,在获取数据成员的地址和函数/属性的地址时,它在公共“接口”上的库代码中有意义。无法链接D Exe,因此没有要断开的接口。在D中,您主要使用静态链接(使用所有源代码编译一个二进制blob),因此没有太多理由包装数据访问-当某些内容被破坏时,编译器会抱怨。我想到的唯一一个可能会有不同表现的问题是,在获取数据成员地址和函数/属性地址时。