相关疑难解决方法(0)

在32位CPU上,"整数"类型比"短"类型更有效吗?

在32位CPU上,整数是4个字节,短整数是2个字节.如果我正在编写一个使用许多数值的C/C++应用程序,它总是符合短整数的提供范围,那么使用4字节整数或2字节整数会更有效吗?

我听说它建议4字节整数更有效,因为它适合从内存到CPU的总线带宽.但是,如果我将两个短整数相加,那么CPU是否会在一次通过中并行封装两个值(从而跨越总线的4字节带宽)?

architecture cpu integer 32-bit cpu-architecture

9
推荐指数
4
解决办法
6547
查看次数

Android 等宽空格 ( ) 宽度与字符宽度不同

我正在开发一个小网络应用程序。我尝试使用 boxdrawing 字符以一种 ascii 艺术方式显示一些输出。但是,我注意到在 Android 上,空格 (  ) 与其他字符的宽度不同,导致输出丑陋。

我已经把字体作为monospace,甚至尝试了monospace,monospaceCSS 设置。

要了解我在说什么:
请在 Android 和桌面浏览器上打开https://tpgnow.herokuapp.com/CERN

预期输出(桌面浏览器): 在此处输入图片说明

实际输出(安卓浏览器): 在此处输入图片说明

我尝试过不同的浏览器、平台和设备。它似乎适用于 Win、Mac、Chrome 和 Firefox,也适用于 iOS,但不适用于 Android(Chrome 或 Firefox)。

有没有人有解决这个问题的方法?

html css fonts android monospace

8
推荐指数
1
解决办法
1692
查看次数

[u]int_fastN_t 类型应该如何为 x86_64 定义,有或没有 x32 ABI?

X32 ABI指定,除其他事项外,对于x86_64体系生成的代码32位指针。它结合了 x86_64 架构(包括 64 位 CPU 寄存器)的优点和 32 位指针减少的开销。

<stdint.h>报头定义的typedef int_fast8_tint_fast16_tint_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)

c x86-64 stdint linux-x32-abi

5
推荐指数
1
解决办法
545
查看次数

x86-64 平台上的 int_fast8_t 大小与 int_fast16_t 大小

我已经了解到,在 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 位?

和对齐有关系吗?

c 64-bit assembly x86-64 low-level

3
推荐指数
1
解决办法
232
查看次数