C++ sizeof 64位和32位下的对比

C++中sizeof的作用是求字节数。32bit编译环境下,C++的一个指针(地址)为4个字节,64bit下一个指针占8个字节。

常用数据类型对应字节数
  可用如sizeof(char),sizeof(char*)等得出

 32位编译器:

      char :1个字节
      char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
      short int : 2个字节
      int:  4个字节
      unsigned int : 4个字节
      float:  4个字节
      double:   8个字节
      long:   4个字节
      long long:  8个字节
      unsigned long:  4个字节

  64位编译器:

      char :1个字节
      char*(即指针变量): 8个字节
      short int : 2个字节
      int:  4个字节
      unsigned int : 4个字节
      float:  4个字节
      double:   8个字节
      long:   8个字节
      long long:  8个字节
      unsigned long:  8个字节

可以看到,很多常用的基本类型包括int、char、short、double等,在32bit和64bit中所占的字节数并没有变化。64位相对于32位的提升,一个要素是在于地址的变化,32bit的机器中地址是用32个比特存的,所以机器最多只能有2^32 = 4G的内存,而64位机器最大可支持2^64(多大自己算一下,好像是17179869184G)的内存;同时64位CPU每个流水线周期可提取64bit数据,而32位的每次最多能读32bit数据,自然数据读取速度快多了。

示例代码:

#include <iostream>
#include <vector>
using namespace std;

void function(int array[])
{
	/*作为函数参数传递进来之后,
	数组名会自动退化为指针,
	所以sizeof(数组名)实际是求一个指针的字节数 */ 
	cout<<"function: "<<sizeof(array)<<endl;	
}

int main()
{
	int array[] = {1, 2, 3};
	int *pionter = new int[12];
	
	//计算的是整个数组的字节数 
	cout<<"sizeof(array): "<<sizeof(array)<<endl;
	
	//可以用sizeof了解自己编译器分配给基本类型的字节大小 
	cout<<"sizeof(int): "<<sizeof(int)<<endl;
	cout<<"sizeof(int&): "<<sizeof(int&)<<endl;
	cout<<"sizeof(short): "<<sizeof(short)<<endl;
	cout<<"sizeof(short&): "<<sizeof(short&)<<endl;
	cout<<"sizeof(short*): "<<sizeof(short*)<<endl;
	cout<<"sizeof(char): "<<sizeof(char)<<endl;
	cout<<"sizeof(double): "<<sizeof(double)<<endl;
	cout<<"sizeof(float): "<<sizeof(float)<<endl;
	cout<<"sizeof(long): "<<sizeof(long)<<endl;
	cout<<"sizeof(long long): "<<sizeof(long long)<<endl;
	cout<<"sizeof(string): "<<sizeof(string)<<endl;//相当于一个指针 
	
	int an_int = 4;
	cout<<"sizeof(an_int): "<<sizeof(an_int)<<endl;
	
	/*一个string变量的大小与它所指的字符串的长度无关,
	  可以这样理解:string变量名是一个指针 
	*/
	string str1 = "Hello";
	string str2 = "HelloWorld";
	cout<<"sizeof(str1): "<<sizeof(str1)<<endl; 
	cout<<"sizeof(str2): "<<sizeof(str2)<<endl;
	
	/*直接传一个字符串进去如何:
	 会把它当成是char数组,并且'\0'也算进长度中.
	*/
	cout<<"sizeof(\"Hello\"): "<<sizeof("Hello")<<endl;// \ :用作转义符 
	
	//要计算数组的长度,必须除去数组单个元素的字节数 
	cout<<"sizeof(array) / sizeof(array[0]): "<<sizeof(array) / sizeof(array[0])<<endl;
	
	//求一个指针的字节数,32位编译环境下是4字节,64bit的为8字节 
	cout<<"sizeof(pionter): "<<sizeof(pionter)<<endl;
	
	function(array);
	
	return 0;
}
/**
编译环境:TDM-GCC 4.8.1 32-bit Release 

输出: 
sizeof(array): 12
sizeof(int): 4
sizeof(int&): 4
sizeof(short): 2
sizeof(short&): 2
sizeof(short*): 4
sizeof(char): 1
sizeof(double): 8
sizeof(float): 4
sizeof(long): 4
sizeof(long long): 8
sizeof(string): 4
sizeof(an_int): 4
sizeof(str1): 4
sizeof(str2): 4
sizeof("Hello"): 6
sizeof(array) / sizeof(array[0]): 3
sizeof(pionter): 4
function: 4

编译环境:TDM-GCC 4.8.1 64-bit Release 
sizeof(array): 12
sizeof(int): 4
sizeof(int&): 4
sizeof(short): 2
sizeof(short&): 2
sizeof(short*): 8
sizeof(char): 1
sizeof(double): 8
sizeof(float): 4
sizeof(long): 4
sizeof(long long): 8
sizeof(string): 8
sizeof(an_int): 4
sizeof(str1): 8
sizeof(str2): 8
sizeof("Hello"): 6
sizeof(array) / sizeof(array[0]): 3
sizeof(pionter): 8
function: 8
输出:
*/

Windows命令行怎么复制内容:

标记  -->  选定内容  --> Enter,然后内容就会被放到剪贴板了。

原文链接: https://www.cnblogs.com/lvlang/p/10586375.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ sizeof 64位和32位下的对比

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/240455

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午8:45
下一篇 2023年2月13日 下午8:45

相关推荐