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数组,并且' '也算进长度中.
*/
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,然后内容就会被放到剪贴板了。