![]() |
1
4
C++标准没有指定int的大小(它表示)。
与寄存器大小有关。一个完全一致的C++实现可以在您的PC上提供32位寄存器,并带有32位寄存器。但这样做效率很低。
所以,是的,在实践中
如果
(有些语言只需要
|
![]() |
2
3
严格按照标准,无法保证int的大小,更不用说与寄存器大小的关系了。此外,一些体系结构具有不同大小的寄存器(即:并非CPU上的所有寄存器都具有相同的大小),并且并非总是使用一个寄存器访问内存(如DOS及其段:偏移寻址)。 尽管如此,在大多数情况下int与“常规”寄存器的大小相同,因为它应该是最常用的基本类型,而这正是CPU优化操作的对象。 |
![]() |
3
2
另外,寄存器大小和int的大小之间没有直接联系。
实例
|
![]() |
4
2
如果我理解正确的话,我并不完全清楚,因为这里混合了一些不同的问题(内存大小、分配、寄存器大小、性能?)。 我可以说的是(以标题为例),在大多数实际处理器上,为了获得最大速度,应该使用与寄存器大小匹配的整数。原因是,当使用较小的整数时,需要的内存较少, 例如,在x86体系结构上,需要一个额外的转换命令。同样在Intel上,您也有一个问题,即访问未对齐(主要在寄存器大小的边界上)内存会带来一些惩罚。当然,在今天的处理器上,事情更加复杂,因为CPU能够并行处理命令。因此,您最终需要对某些体系结构进行微调。 因此,最好的猜测——不知道体系结构——是使用寄存器大小的整数,只要你能负担得起内存。 |
![]() |
5
2
我没有标准的副本,但是我的旧版本
C语言
你不是唯一一个说“我承认这一点”的人 this is technically a flaw, but it's not really exploitable ." |
![]() |
Tedi · 在保存和检索机制之间包含命令的代码 7 年前 |
![]() |
Bibrak · 如何从程序集传递堆栈中某个位置的内存地址? 7 年前 |
![]() |
G. Guidi · 为什么寄存器$v0被保存? 7 年前 |
![]() |
Vagish · C:通过引用传递自动变量 7 年前 |
![]() |
St.Antario · 了解cpu寄存器 7 年前 |
![]() |
Dfarrelly · x86给定AH和AL计算AX? 9 年前 |
![]() |
CRThaze · 函数中寄存器使用的ARMv6最佳实践 10 年前 |