问题标签 [word-size]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 确定我的处理器的字长
如何确定 CPU 的字长?如果我理解正确,int
应该是一个词,对吗?我不确定我是否正确。
那么仅打印sizeof(int)
就足以确定我的处理器的字长吗?
c - LP64、LLP64 和 IL32 转换
在 80 年代从 16 位过渡到 32 位期间,int
是 16 位或 32 位。使用当前的 64 位转换命名法,我知道 ILP32 和 LP32 机器的分布相当均匀。当时我相信人们理解,int
对于任何给定的架构,它始终遵循寄存器或指针宽度,并且long
将保持 32 位。
快进 25 年,我看到 LP64 相当主流,但直到我遇到 64 位平台 [我在 2007 年发现桌面 Linux :)],我一直期望 IP64 是下一个合乎逻辑的步骤。
- 这(LP64)是 64 位的预期演变吗?
- 这种关系如何
char <= short <= int <= long
适应这种将整数类型固定到我们留下的每个平台的新兴方案? - 这些过渡方案与在各种平台上使用(您选择的
{l,u}case
)WORD
/有何关系?DWORD
- Windows 的某些区域仍然包含
INT
16 位的表单。Windows 会脱离 LLP64 还是为时已晚? - 为什么这次
int
选择被抛在后面,而不是在 32 位过渡期间?
- 这种关系如何
haskell - 我可以从 Int32 和 Int64 获得什么性能?
我经常看到这样的 pprogram ,在Int64
32 位平台上绝对是性能杀手。我现在的问题是:
如果我的任务需要特定的字长(在我的情况下是 RNG),Int64
在 64 位平台上是有效的还是仍然使用 C 调用?Int64
将 an 转换为 an 的效率如何Int
?
c - 在 C 中指定枚举类型的大小
已经阅读了这个相关的问题,但正在寻找更具体的东西。
- 有没有办法具体告诉你的编译器你希望你的枚举有多宽?
- 如果是这样,你怎么做?我知道如何在 C# 中指定它;在 C 中是否类似地完成?
- 它甚至值得做吗?当枚举值传递给函数时,它是否会作为
int
-sized 值传递?
c - sizeof 是否返回 C 中某个类型的字节数或八位字节数?
简单地说,在 C 和变体中(不像 wuss java 和它的虚拟机)不同目标上的原始类型的大小可能会有很大差异,除非你使用定义的固定宽度类型,否则真的不能保证stdint.h
,即使那样你的实现也有支持他们。
无论如何假设(因为在大多数现代机器上,一个字节是一个八位字节,出于网络目的,我假设(ASCII)) sizeof 是否以字节或八位字节返回数据类型的大小?
assembly - tword、oword 和 yword 操作数的大小是多少?
NASM / YASM 手册中使用的大小tword
和操作数是多少?在相关的说明中,这些名称是否有技巧或潜在的想法?有没有办法给更大的字长赋予逻辑名称?oword
yword
我知道虽然系统之间的字长可能不同,但 NASMword
是 2 个字节,dword
是两倍(4 个字节),qword
是一个四字(8 个字节),但是......是tword
一个三字(6 个字节)?而且我什oword
至yword
想不出一个似是而非的意思。
请注意,这可能是一个简单的问题,但我找不到答案。在 NASM 和 YASM 手册中没有解释这些大小,甚至在DQ
, DT
, DY
, RESQ
, REST
,RESY
伪指令中也没有解释。我在某处读到 MASM 使用类似的系统,但也找不到任何东西。
编辑:根据答案,这是完整列表:
- 1 字节(8 位):
byte
,DB
,RESB
- 2 个字节(16 位):
word
,DW
,RESW
- 4 字节(32 位):
dword
,DD
,RESD
- 8 字节(64 位):
qword
,DQ
,RESQ
- 10 字节(80 位):
tword
,DT
,REST
- 16 字节(128 位):
oword
,DO
,RESO
,DDQ
,RESDQ
- 32 字节(256 位):
yword
,DY
,RESY
- 64 字节(512 位):
zword
,DZ
,RESZ
c - 结构大小、填充和未来
考虑以下程序
使用 MinGW 编译时,我在 32 位和 64 位系统上都得到 sizeof(Foo)=12 和 sizeof(Bar)=12(我猜在 16 位环境中,sizeof(Bar)=10)。未来这些结构的大小是否有可能是 16 以更好地适应 64 位环境?
我将结构存储在文件中,并且不想在将来添加解决方法。Doom 事物结构布局在 1993 年可能是一个不错的选择,但不是今天。
assembly - 读取奇数地址,半个字?
众所周知,许多 CPU 架构(ARM、PPC)不能读取奇数地址,但如果强制也会产生异常,还有一些可以,但速度稍慢。(x86)
但是是否有任何 CPU 只能处理完整的 32 位(甚至更大!)字?即它不能寻址 16 位字?也许是amd64?
我正在尝试编写一个可移植但快速的 C malloc 类分配器,并希望正确对齐我的内存访问。目前我的目标是 ARM、i386 和 amd64,我可以查找这些特性,但我认为保持警惕会很好。
我想提出我的问题的具体方法是;
是否有 CPU 从地址 0x2 读取 16 位(假设为了论证,通常 0 附近的地址范围是有效的,我知道有些 CPU 不使用第一页)会产生总线错误,其中 CPU =任何 MIPS、ARM、x86、amd64、68k、88000、SH、OpenRISC、Sparc、PPC、Cell/SPE?
(顺便说一下,我是从 C 程序员的角度来看这整件事。所以我假设 C 编译器给了我所有正常的 C 类型,比如 char、uint32_t 等)
byte - 以位为单位的字大小转换混淆
我有一个非常基本的问题,这让我有些困惑。对此进行一些复习会很棒。
每台计算机都有一个字长。字长是虚拟地址空间的最大尺寸。因此,如果我们说 a 32 bit word size
,我们有一个虚拟地址空间,其范围最大为2^32 values
. 在参考文献中它说2^32 bytes
?为什么是以字节为单位的范围。
另外,我无法理解的是2^32
可能的值如何成为可能的地址范围4GB
?所以,我的困惑源于将32 bit word size
变成4 byte word size
,然后如何4 bytes
,乘以得到2^32
的困惑4GB
。
我试图使其合理化的一种方法如下:
2^32
因此by 的连续除法2^10
结果为2^2 GB
or 4 GB
。
有人能指出 32 位字大小如何达到 4GB 页面范围吗?
谢谢
assembly - nasm中堆栈中重复加法的乘法
我的实施结果有问题。如果你追踪它,它似乎是正确的。但是,它给出了错误的结果。如果你输入 99 和 99,它会给出 5318,但它应该给出 9801。
顺便说一句,程序接受两个 2 位数字并通过重复添加被乘数(第一个输入)来相乘,直到它满足乘数中的值(第二个输入)
我已经尝试定位问题,似乎当我使用字长除法时,它会给出随机值。word-size 最大为 65,656,但超过 255 时结果会损坏。为什么?
请注意第一个选项,即重复加法运算的乘法。
非常感谢您的帮助。