相关疑难解决方法(0)

Rust的128位整数“ i128”如何在64位系统上工作?

Rust具有128位整数,这些整数用数据类型表示i128u128对于无符号整数):

let a: i128 = 170141183460469231731687303715884105727;
Run Code Online (Sandbox Code Playgroud)

Rust如何使这些i128值在64位系统上工作?例如,如何对这些进行算术运算?

据我所知,既然该值不能容纳在x86-64 CPU的一个寄存器中,那么编译器是否会以某种方式使用2个寄存器i128?还是他们改用某种大整数结构来表示它们?

x86-64 int128 bigint rust llvm-codegen

116
推荐指数
4
解决办法
1万
查看次数

为什么CPU在字边界上访问内存?

我听到很多数据应该在内存中正确对齐,以提高访问效率.CPU访问内存在字边界上.

因此,在以下场景中,CPU必须进行2次内存访问才能获得单个字.

Supposing: 1 word = 4 bytes

("|" stands for word boundary. "o" stands for byte boundary)


|----o----o----o----|----o----o----o----|   (The word boundary in CPU's eye)
           ----o----o----o----              (What I want to read from memory)
Run Code Online (Sandbox Code Playgroud)

为什么会这样?什么是CPU的根本原因只能读取字边界?

如果CPU只能访问4字节字边界,则地址线应仅需要30位,而不是32位宽.因为CPU的眼中最后2位始终为0.

添加1

更重要的是,如果我们承认CPU必须读取字边界,为什么边界不能我想要读取的地方开始?似乎边界在CPU眼中是固定的.

添加2

根据AndreyT的说法,似乎边界设置是硬连线的,它是由内存访问硬件硬连线的.就这一点而言,CPU是无辜的.

非常感谢...

c memory cpu assembly operating-system

19
推荐指数
2
解决办法
5349
查看次数

在32位应用程序中使用64位整数是否可以?

我注意到在C和C++中,我们可以使用int64_t,或者只是一个long long.

如果我使用这些类型编译32位代码,我会在64位和/或32位机器上遇到任何性能问题吗?

除了节省一些RAM,我还有理由使用int吗?
毕竟,64位整数在存储大数字时更有用.

c c++ int int64

8
推荐指数
2
解决办法
4862
查看次数

C99是否要求"int64_t"类型可用?

C99标准是否要求符合标准的编译器具有64位int64_t 定义(和可用)?或者它是可选的,恰好被所有流行的编译器定义?我显然要特别询问CPU无法直接处理64位值的平台,但问题更为笼统

我不能真正从C数据类型维基百科页面中找出这一点,也不能从这个相关问题的答案中解决这个问题.

c 64-bit c99 language-lawyer

2
推荐指数
1
解决办法
134
查看次数