gpt4 book ai didi

c++ - 整数和寄存器大小之间有关系吗?

转载 作者:太空狗 更新时间:2023-10-29 19:41:18 25 4
gpt4 key购买 nike

最近,我在最近的一次面试中被挑战了一个字符串操作问题,并被要求优化性能。我不得不使用迭代器在 TCHAR 字符之间来回移动(支持 UNICODE - 每个字符 2 个字节)。

没有真正考虑数组长度,我犯了一个奇怪的错误,没有使用 size_t 而是使用 int 进行迭代。我了解它不合规且不安全。

int i, size = _tcslen(str);    
for(i=0; i<size; i++){
// code here
}

但是,我们可以分配的最大内存是有限的。如果 int 和寄存器大小之间存在关系,则使用整数可能是安全的。

例如:没有任何虚拟映射工具,我们只能映射 2^register-size 字节。由于 TCHAR 的长度为 2 个字节,因此是该数字的一半。对于任何将 int 作为 32 位的系统,即使您不使用 int 的无符号版本,这也不会成为问题。有嵌入式背景的人习惯认为 int 是 16 位的,但是在这样的设备上内存大小会受到限制。所以我想知道整数和寄存器大小之间是否存在架构微调决策。

最佳答案

C++ 标准没有指定 int 的大小。 (它说 sizeof(char) == 1sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)

所以没有必须与寄存器大小有关系。一个完全符合 C++ 的实现可以在你的 PC 上用 32 位寄存器给你 256 字节的整数。但这效率很低。

所以是的,在实践中,int 的大小数据类型通常等于 CPU 通用寄存器的大小,因为这是迄今为止最有效的选择。

如果 int比寄存器大,那么简单的算术运算将需要不止一条指令,这将是昂贵的。如果它们小于寄存器,那么加载和存储寄存器的值将需要程序屏蔽掉未使用的位,以避免覆盖其他数据。 (这就是为什么 int 数据类型通常比 short 更有效的原因。)

(有些语言只要求 int 是 32 位的,在这种情况下显然与寄存器大小没有关系——除了选择 32 位是因为它是常见的寄存器大小)

关于c++ - 整数和寄存器大小之间有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1078768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com