在32位CPU上,整数是4个字节,短整数是2个字节.如果我正在编写一个使用许多数值的C/C++应用程序,它总是符合短整数的提供范围,那么使用4字节整数或2字节整数会更有效吗?
我听说它建议4字节整数更有效,因为它适合从内存到CPU的总线带宽.但是,如果我将两个短整数相加,那么CPU是否会在一次通过中并行封装两个值(从而跨越总线的4字节带宽)?
我正在开发一个小网络应用程序。我尝试使用 boxdrawing 字符以一种 ascii 艺术方式显示一些输出。但是,我注意到在 Android 上,空格 ( ) 与其他字符的宽度不同,导致输出丑陋。
我已经把字体作为monospace,甚至尝试了monospace,monospaceCSS 设置。
要了解我在说什么:
请在 Android 和桌面浏览器上打开https://tpgnow.herokuapp.com/CERN。
我尝试过不同的浏览器、平台和设备。它似乎适用于 Win、Mac、Chrome 和 Firefox,也适用于 iOS,但不适用于 Android(Chrome 或 Firefox)。
有没有人有解决这个问题的方法?
的X32 ABI指定,除其他事项外,对于x86_64体系生成的代码32位指针。它结合了 x86_64 架构(包括 64 位 CPU 寄存器)的优点和 32 位指针减少的开销。
的<stdint.h>报头定义的typedef int_fast8_t,int_fast16_t,int_fast32_t,和int_fast64_t(和相应的无符号类型uint_fast8_t等人)中,其中的每一个是:
在所有至少具有指定宽度的整数类型中,通常操作最快的整数类型
附注:
不能保证指定的类型在所有用途中都是最快的;如果实现没有明确的理由选择一种类型而不是另一种,它只会选择一些满足符号和宽度要求的整数类型。
(引自N1570 C11 草案。)
问题是,无论有没有 x32 ABI ,应该如何为 x86_64 架构定义[u]int_fast16_t和[u]int_fast32_t类型?是否有指定这些类型的 x32 文档?它们是否应该与 32 位 x86 定义(均为 32 位)兼容,或者,由于 x32 可以访问 64 位 CPU 寄存器,它们在使用或不使用 x32 ABI 的情况下是否应该具有相同的大小?(请注意,无论是否使用 x32 ABI,x86_64 都有 64 位寄存器。)
这是一个测试程序(取决于特定于 gcc 的__x86_64__宏):
#include <stdio.h>
#include <stdint.h>
#include <limits.h>
int main(void) {
#if …Run Code Online (Sandbox Code Playgroud) 我已经了解到,在 x86-64 平台上使用任何 64 位寄存器都需要一个REX前缀,而任何小于 64 位的地址都需要一个地址大小前缀。
在 x86-64 位上:
E3rel8 是jrcxz
67 E3rel8 是jecxz
67是地址大小覆盖前缀的操作码。
sizeof(int_fast8_t)是 8 位,而其他sizeof(int_fast16_t)和sizeof(int_fast32_t)(仅在 Linux 上)是 64 位。
为什么其他快速类型定义是 64 位而只有int_fast8_t8 位?
和对齐有关系吗?