日常学习记录1:基本类型占用字节、字节补齐、cosnt

1.C++基本类型所占字节数

类型16位32位64位
char111
char*(指针变量)248
short222
int244
unsigned int244
long448
unsigned long448
long long888
float444
double888

 

 

 

 

 

 

 

 

 

 

2.C++内存字节补齐

在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储第一个成员的地址和整个结构的地址相同

例如,下面的结构各成员空间分配情况:

e.g.1:
struct test
{
     char a;
     short b;
     float c;
     char d;
};
结构的第一个成员a为char类型,其自然对界为1,其偏移地址为0,占据了第1个字节。第二个成员b为short类型,其自然对界为2,起始地址必须2字节对界,因此,编译器在b和a之间填充了一个空字节。结构的第三个成员c和第四个成员d恰好落在其自然对界地址上,在它们前面不需要额外的填充字节。在test结构中,成员c要求4字节对界,是该结构所有成员中要求的最大对界单元,因而test结构的自然对界条件为4字节,编译器在成员d后面填充了3个空字节(因为填充之前为9字节,不是4的倍数)。整个结构所占据空间为12字节。

e.g.2:

struct tagS1
{
    //假设地址从0开始,这里最长的类型为_unT1,长度为8...
    //变量的首地址为地址模sizeof(变量类型)结果为0的地址开始
    char a;//0 (0模1==0,所以从0开始)
    int n;//4-7 (2和3模4不等于0,从4开始)
    _unT1 t1;//8-15(8模8等于0,从8开始)
    long l;//16-19(16模4等于0,从16开始)
    char sz[22];//20-41(20模1等于0,从20开始)
};
//由于0-41的长度为42,42不为8的倍数(8是最大对界单元),所以补长为8的倍数,结果为48

 

3.const关键字定义指针

int const *p = &i  定义了指向int型常量的指针,等价于 const int *p,i的值不能变,p的指向可以变

int *const p = &i  定义了指向int型变量的常量指针,i的值可以变,p的指向不能变

 

4.顶层const、底层const

对于指针、引用(间接变量),const可以分为顶层和底层:

顶层const,表示对象本身的常量性:int *const p = &i;

底层const,表示所指对象的常量性:const int *p = &i;  const int &r = i;( const int &r 和 int const &r一样,引用&只有底层const)

const int *const p = &i;//第一个const是底层const,说明i的常量性,第二个是顶层const说明p的常量性

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值