Tag: 32bit 64bit

为什么C编译器指定长为32位,长为64位?

在128位数字成为现实之前,长64位并保留很长时间是不是更有意义?

如何查找机器是32位还是64位

无论如何,从C编程中找出操作系统当前是以32位还是64位模式运行。 我正在使用如下的简单程序 int main(void){ switch(sizeof(void*)){ case 4: printf(“32\n”); break; case 8: printf(“64\n”); break; } } 这是正确的方法吗? 这个代码是否适用于所有场景,例如,如果硬件是64位且操作系统是32位,它会返回什么? 我没有机器在diff配置中测试它。 感谢您的建议。

指针大小:依赖因素

我发现很难理解C中指针变量大小所依赖的因素。 我检查了一些参考文献,我到目前为止获得的唯一信息是pointer大小取决于处理器架构 。我想知道以下细节 请详细说明架构如何影响指针大小。 通常,如果指针是x bits则应该存在0 to 2^(X)-1个地址位置。在关联地址位置的数量和程序可用的实际存储量时,我正在丢失轨道。

便携式处理64/32位time_t的方法

我有一些代码,它们都是在Windows和Linux上构建的。 此时的Linux总是32位,但Windows是32位和64位。 Windows希望time_t为64位,而Linux仍然将其作为32位。 我很好,除了在某些地方time_t值转换为字符串。 所以当time_T是32位时,它应该用%d完成,当它是64位时用%lld …这样做的聪明方法是什么? 另外:任何想法我如何找到time_t传递给printf样式函数来解决这个问题的所有地方? 编辑:我想出将TT_FMT声明为“%d”或“%lld”,然后将printf中的printfs(“time:%d,register:blah”)更改为printf(“time:”TT_FMT“,注册:blah“)有更好的方法吗? 我如何找到它们?

int变量的大小

如何确定int的大小? int的大小是否真的取决于处理器。 对于32位机器,它将是32位,对于16位,它是16位。 在我的机器上它显示为32位,虽然机器安装了64位处理器和64位Ubuntu。

使用intptr_t而不是void *?

使用intptr_t作为通用存储(保存指针和整数值)而不是void*是一个好主意吗? (如下所示: http : //www.crystalspace3d.org/docs/online/manual/Api1_005f0-64_002dBit-Portability-Changes.html ) 对于我已经读过的内容: int – > void* – > int roundtrip不保证保持原始值; 我猜int – > intptr_t – > int会做 void*和intptr_t上的指针算术需要强制转换,所以没有人在这里获得优势 void*表示存储指针时显式转换次数较少, intptr_t表示存储整数值时转换次数较少 intptr_t需要C99 还有什么我应该考虑的?