Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用uintX\t性能_C++_C_Performance_Uint - Fatal编程技术网

C++ 使用uintX\t性能

C++ 使用uintX\t性能,c++,c,performance,uint,C++,C,Performance,Uint,我与团队负责人进行了讨论,他告诉我使用uintX\u t非常有问题,会导致性能问题……我不明白为什么。。。。 使用uint8\u t和uint16\u t与unsigned char和unsigned short相同-我认为这些类型的使用不会导致性能问题。。。 正如uint64\u t就像long。。。。。。 可能是uint128\u t等会出现性能问题。。 是正确的还是我遗漏了什么 Upd 众所周知,unsigned char和unsigned short大小在所有平台中都不应为8和16…仅使

我与团队负责人进行了讨论,他告诉我使用
uintX\u t
非常有问题,会导致性能问题……我不明白为什么。。。。 使用
uint8\u t
uint16\u t
unsigned char
unsigned short
相同-我认为这些类型的使用不会导致性能问题。。。 正如
uint64\u t
就像
long
。。。。。。 可能是
uint128\u t
等会出现性能问题。。 是正确的还是我遗漏了什么

Upd
众所周知,
unsigned char
unsigned short
大小在所有平台中都不应为8和16…仅使用经典值…

保证大小是主要用途。

这些类型不是为性能问题而设计的。它们的目的是保证不同系统的整数大小相同

例如,当您使用
int32\t
时,您可以确保它的大小在代码编译的任何地方都是32位,但您不确定
int
的大小

问题是使用这些保证大小的类型可能会影响性能,
int\u fastX\t
类型可以减少这种不良影响,因为它们保证最小大小

例如,编译器可以在32位机器中使用32位的
int
作为
int\u fast16\t

这是一个“一段字符串有多长”类型的问题

每当有人提出您关心的这种性质的声明时,请查看他们使用的代码和他们的基准测试结果。然后,您可以判断这些基准是否适用于您的案例,并可能自己运行它们


换句话说,如果没有反映您的环境和您对这些类型的实际使用的基准,索赔就没有多大价值。可能是您的团队负责人对所讨论的代码库进行了彻底的分析;也可能是他只是“认为”
uintX\t
会更慢。我们无法知道它是哪种类型。

它们是类型,并试图通过保证它们的大小使某些类型跨平台。特别是,它们没有任何会导致性能问题的地方。问题可能是如何使用它们(对于
无符号int
无符号short
无符号char
,它们没有什么不同)


简而言之,您的团队领导是错误的,这可能是错误的直接后果。

如果您在32位处理器上使用
uint8\t
,并且如果数字大于255,则不需要自动溢出,则可能会出现性能问题

原因:编译器可能需要在处理/使用该值之前对其应用掩码

例如,8位值存储在32位寄存器中,需要对其进行比较,如果处理器没有指令仅使用寄存器的8个低位进行比较,则编译器必须在进行比较之前应用掩码0x0000FFFF

这就是为什么会有这样的类型:
int\u least8\u t
uint\u fast8\u t
。。。
查看此页面,查看所有可用类型

他错了;它们如何可能导致性能问题。它们可能会在具有奇怪整数大小的平台上导致性能问题。注意:固定大小的整数类型并不能保证在所有平台上都定义。如果您希望具有至少x位的最快类型,请使用最快的int类型。看,我不知道确切的答案,但我知道实现定义
short
int
的主要原因是为了实现最高效的实现。如果指定一个固定宽度
int
,唯一可以做的就是保持性能不变或降低性能。您的团队领导是否有具体的示例向您展示?没有这些,任何讨论都将是模糊的,可能没有用处。好吧……我理解!但问题仍然存在——使用them@Yakov:我已经提到了。是的,它可能会导致性能问题,您可以使用
int\u fastX\u t
类型。也许可以查看问题。根据其中一个答案,指定比本机
int
小的固定宽度
int
可以通过加载/存储降低性能。然后,固定宽度
int
大于本机
int
会降低性能,因为它大于寄存器大小,因此可能需要将计算分为上半部分和下半部分。但总的来说,在x86上,显然这两种方式都没有太大的区别。