gpt4 book ai didi

c++ - C/C++ : sizeof(short), sizeof(int)、sizeof(long)、sizeof(long long) 等...在 32 位机器上与在 64 位机器上

转载 作者:行者123 更新时间:2023-11-30 20:15:21 33 4
gpt4 key购买 nike

我运行的是 Windows 7(64 位)。

这个问题与此处找到的问题相同:

long on a 64 bit machine

但更深入,因为它处理更多的数据类型并适用到 C 或 C++,而不是 C#。首先,我使用的是 Microsoft Visual Studio Ultimate 2012。不幸的是,虽然这个 IDE 支持 C# 和 Visual C++,但它不再支持普通的看起来很老的 Visual C。不管怎样,我尝试过创建以下标准 C++IDE 中的程序:

#include <cstdio>

int main(int argc, char **argv) {

printf("sizeof(short): %d\n", (int) sizeof(short));

printf("sizeof(int): %d\n", (int) sizeof(int));

printf("sizeof(long): %d\n", (int) sizeof(long));

printf("sizeof(long long): %d\n", (int) sizeof(long long));

printf("sizeof(size_t): %d\n", (int) sizeof(size_t));

printf("sizeof(void *): %d\n", (int) sizeof(void *));

printf("Hit enter to exit.\n");

char *scannedText;

scanf("%s", &scannedText);

return 0;

}

由于我找不到运行控制台应用程序的选项,我只是在“return 0;”处放置一个断点语句,以便查看输出在控制台中。结果是:

sizeof(short): %d\n", 4
sizeof(int): %d\n", 4
sizeof(long): %d\n", 4
sizeof(long long): 8
sizeof(size_t): 4
sizeof(void *): 4
Hit enter to exit.

旧的 C 教科书指出,int 设置为“字大小”,在 16 位上为 16机器上为 32,32 位机器上为 32。然而这个规则在 64 位上似乎被打破了人们期望“字长”为 64 的系统。相反,从什么我读过这些系统类似于 32 位系统,但有更好的支持64 位计算量高于 32 位计算量。因此,结果从上面的 C++ 程序得到的结果与得到的结果完全相同在 32 位系统上获取。数据类型的大小 (size_t)(可以用于测量内存中对象占用的内存量)也将其值存储在 4 个字节中,而且也很有趣的是用于访问内存位置的指针的大小(例如 sizeof(void *)显示用于存储指向内存中任何位置的通用指针的位数)也是 32 位长。

任何人都知道 Visaul C 为何从 Visual Studio 2012 中删除以及是否仍然可以从 Visual Studio 2012 运行控制台应用程序,而无需在退出之前必须设置断点或从标准输入读取文本如上所述,以便控制台窗口在关闭之前暂停?

此外,我的解释是否正确,或者我是否配置错误例如,它在 IDE 中编译为 32 位而不是 64 位系统?根据其中一位发帖者的说法,由于我的系统是 64 位,所以我应该请参阅此处描述的 size_t 和指针的结果: https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models但我没有看到这个。有没有办法重新配置 Visual Studio这样它就可以支持 64 位内存模型,而不是我当前在程序的输出中看到?

谢谢。

最佳答案

对我来说看起来不错。在 c/c++ 中,int 没有根据位大小进行具体定义。创建项目时,您可以选择“控制台应用程序”。 VS2012 仍然支持 C,但它们大多将项目集中到 C/C++ 中。有一个编译器选项(我认为是/TC)将强制编译器符合 C 规范。默认情况下,它将通过文件扩展名暗示语言。 MS C 支持并不理想,例如它不包括 stdbool.h。

如果您想控制数据的位大小,您可以使用包含精确宽度 int 数据类型的 stdint.h。

关于c++ - C/C++ : sizeof(short), sizeof(int)、sizeof(long)、sizeof(long long) 等...在 32 位机器上与在 64 位机器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20109984/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com