10

他们为什么这么做:

Sys_SetPhysicalWorkMemory( 192 << 20, 1024 << 20 );   //Min = 201,326,592  Max = 1,073,741,824

而不是这个:

Sys_SetPhysicalWorkMemory( 201326592, 1073741824 );

我从中获得代码的文章

4

4 回答 4

25

一个简洁的属性是移动一个值<< 10与将其乘以 1024 (1 KiB) 相同,并且<< 20是 1024*1024 (1 MiB)。

以 10 的连续幂移位产生我们所有标准的计算机存储单位:

因此,该函数将其参数表示为 192 MB(最小)和 1024 MB(最大)。Sys_SetPhysicalWorkMemory(int minBytes, int maxBytes)

于 2013-01-15T04:37:52.230 回答
12

自我评论代码:

192 << 20 表示 192 * 2^20 = 192 * 2^10 * 2^10 = 192 * 1024 * 1024 = 192 MByte

1024 << 20 表示 1024 * 2^20 = 1 GByte

对常量的计算被优化掉了,所以什么都没有丢失。

于 2013-01-15T04:40:34.843 回答
2

我可能错了(而且我没有研究源代码),但我想这只是出于可读性的原因。

于 2013-01-15T04:37:48.220 回答
1

我认为重点(尚未提及)是

除了最基本的编译器之外,所有编译器都会在编译时进行转换。每当您将运算符与常量表达式一起使用时,编译器甚至可以在生成代码之前执行此操作。请注意,在 constexpr 和 C++11 之前,这并没有扩展到函数。

于 2013-01-15T10:09:37.090 回答