C/C++:32位机器上的sizeof(短),sizeof(int),sizeof(long),sizeof(long long)等…而不是64位机器
作者:互联网
我正在运行Windows 7(64位).
这个问题看看这里找到的同一个问题:
但它更深入,因为它处理更多的数据类型并适用
到C或C,而不是C#.首先,我使用的是Microsoft Visual Studio Ultimate 2012.
不幸的是,虽然这个IDE支持C#和Visual C,但它不再支持plain
旧的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;
}
因为我找不到运行控制台应用程序的选项
在“返回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.然而,这个规则似乎在64位上突破
人们期望“字大小”为64的系统.相反,从什么
我读过这些系统就像32位系统,但有更好的支持
比32位计算机的64位计算.因此,结果
从上面的C程序中获得的完全相同
在32位系统上获得.数据类型的大小(size_t)(可以
用于测量内存中对象占用的内存量)
还将其值存储在4个字节中,这也很有趣
用于访问内存位置的指针大小(例如sizeof(void *)
显示用于存储通用指针到内存中任何位置的位数)
也是32位长.
任何人都知道如何从Visual Studio 2012中删除Visaul C以及是否
仍然可以在没有的情况下从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-3,32bit-64bit,c,visual-studio-2012 来源: https://codeday.me/bug/20191007/1866078.html