标签: word-size

在C中指定枚举类型的大小

已经阅读了这个相关的问题,但正在寻找一些更具体的东西.

  • 有没有办法告诉你的编译器具体你想要你的枚举有多宽?
  • 如果是这样,你怎么做?我知道如何在C#中指定它; 它在C中同样完成了吗?
  • 它甚至值得做吗?当枚举值传递给函数时,是否会将其作为int-sized值传递?

c optimization enums word-size

30
推荐指数
8
解决办法
5万
查看次数

确定处理器的字大小

如何确定CPU的字大小?如果我理解正确,int一个字应该是正确的吗?我不确定我是否正确.

那么打印sizeof(int)是否足以确定我的处理器的字大小?

c processor word-size

27
推荐指数
3
解决办法
4万
查看次数

tword,oword和yword操作数的大小是多少?

什么是大小tword,oword以及yword操作数,如使用NASM/YASM手册?在相关的说明中,这些名称是否存在技巧或潜在的想法?有没有一种方法可以为更大的字大小赋予逻辑名称?

我知道,虽然字大小可以系统之间是不同的,一个NASM word是2个字节,dword是两倍(4个字节),qword是一个四字(8个字节),但是...是tword一个三重字(6个字节)?而对于owordyword我甚至不能想象的一个似是而非的含义.

请注意,这可能是一个简单的问题,但我找不到答案.在NASM和YASM手册这些尺寸没有解释,甚至没有在DQ,DT,DY,RESQ,REST,RESY伪指令.我读到MASM使用类似系统的地方,但也找不到任何东西.


编辑:根据答案,这是完整的列表:

  • 1个字节(8位): ,,byteDBRESB
  • 2个字节(16位): ,,wordDWRESW
  • 4个字节(32位): ,,dwordDDRESD
  • 8个字节(64位): ,,qwordDQRESQ
  • 10个字节(80位): ,,twordDTREST
  • 16个字节(128位): ,oword,DO,,RESODDQRESDQ
  • 32个字节(256位): ,,ywordDYRESY
  • 64个字节(512位): …

assembly nasm cpu-word word-size yasm

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

sizeof是否返回C中某个类型的字节数或八位字节数?

简单地放入C和变体(与wuss java及其虚拟机不同),不同目标上的基元类型的大小可能会有很大差异,除非您使用定义的固定宽度类型stdint.h,否则实际上无法保证,甚至您的实现也是如此支持他们.

无论如何假设(因为在大多数现代机器上,一个字节是八位字节,为了网络目的,我​​假设(ASCII))sizeof是以字节还是以八位字节的形式返回数据类型的大小?

c byte sizeof word-size

18
推荐指数
3
解决办法
3万
查看次数

LP64,LLP64和IL32转换

在80年代从16位转换到32位期间,int是16位或32位.使用当前的64位转换命名法,我知道ILP32和LP32机器的传播非常均匀.当时我相信它被理解为int总是遵循任何给定架构的寄存器或指针宽度,并且long将保持32位.

快进25年,我发现LP64是相当主流的,但直到我遇到64位平台[我在2007年发现桌面Linux :)],我总是期望IP64成为下一个合乎逻辑的步骤.

  1. 这是(LP64)64bit的预期演变吗?
    • 这种char <= short <= int <= long关系如何适应这种将整数类型固定到我们留下的每个平台的新方案?
    • 这些过渡方案如何与(您选择{l,u}case)WORD/ DWORD在各种平台上使用相关?
    • Windows的某些区域仍包含INT16位的表单.Windows会不会发展成LLP64还是为时已晚?
    • 为什么int选择这次被抛弃,而不是在32位过渡期间?

c architecture history platform word-size

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

我可以从Int32和Int64获得什么样的性能?

我经常看到像这样的 pprograms ,Int64在32位平台上绝对是性能杀手.我现在的问题是:

如果我的任务需要特定的字长(在我的情况下是RNG),Int64在64位平台上是否有效或者它仍然会使用C调用吗?而如何有效的转化的Int64一个Int

int 64-bit haskell 32bit-64bit word-size

7
推荐指数
1
解决办法
1007
查看次数

64位原子添加到CUDA中

atomicAdd我在 CUDA 7 下使用时遇到问题。atomicAdd定义为“ int”、“ unsigned int”和“ unsigned long long int”,说明它使用“32 或 64 位值”。

为了安全起见,在我们的代码中我们使用uint32_tuint64_t。然而 gcc 是这样定义的:

#if __WORDSIZE == 64
typedef unsigned long int   uint64_t;
#else
__extension__
typedef unsigned long long int  uint64_t;
#endif
Run Code Online (Sandbox Code Playgroud)

因此,当我将 an 传递uint64_tatomicAdd它时,它会抱怨,因为它没有为“ unsigned long int”定义。

是否可以uint64_t == long long int按照编程指南中所述假设进行 CUDA 编译?

c++ types cuda atomic word-size

6
推荐指数
1
解决办法
3042
查看次数

结构大小,填充和未来

考虑以下程序

#include <cstdio>
#include <stdint.h>

struct Foo
    {
    int32_t a;
    int32_t b;
    int32_t c;
    };

struct Bar
    {
    int32_t a;
    int32_t b;
    int16_t c;
    };

int main()
    {
    printf("sizeof(Foo)=%u\nsizeof(Bar)=%u",sizeof(Foo),sizeof(Bar));
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

在使用MinGW进行编译时,我在32位和64位系统上得到sizeof(Foo)= 12和sizeof(Bar)= 12(我想在16位环境中,sizeof(Bar)= 10).是否有可能在未来,这些结构的大小将是16,以便在64位环境中更好地适应?

我将结构存储在文件中,并且不希望将来添加解决方法.Doom的东西结构布局可能是一个很好的选择1993但不是今天.

c compiler-construction padding microprocessors word-size

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

装配中局部变量的大小

我有以下C功能:

void function(int a) {
  char buffer[1];
}
Run Code Online (Sandbox Code Playgroud)

它产生以下汇编代码(gcc,0优化,64位机器):

function:
  pushq %rbp
  movq  %rsp, %rbp
  movl  %edi, -20(%rbp)
  nop
  popq  %rbp
  ret
Run Code Online (Sandbox Code Playgroud)

问题:

  • 为什么缓冲区占用20个字节?
  • 如果我声明char buffer而不是char buffer[1]偏移是4个字节,但我希望看到8,因为机器是64位,我认为它将使用qword(64位).

在此先感谢,如果问题重复,我很抱歉,我无法找到答案.

c assembly gcc x86-64 word-size

0
推荐指数
1
解决办法
119
查看次数