(1) 指针的大小永远都是4字节,因为保存的是地址。(2)堆:它的物理内存空间是由程序申请的,并由程序负责释放。 栈:它是由操作系统分配的,内存的申请与回收都由OS管理(先进后出)。(3) char i[10]={'a','b','c','d','e','f','g','h','i'}; cout<<i<<endl; //输出 abcdefghi 如果i是数值型的话,这里输出的是相应数值变量的首地址 cout<<&a Read More
字节对齐有其中一条规则是这样说的:结构体的总大小为结构体最宽(最大)基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。(所以在vs下,sizeof查看大小的时候默认对齐大小是取最宽的数据类型的大小)原因:CPU的访问粒度不仅仅是大小限制,地址上也有限制。也就是说,CPU只能访问对齐地址上的固定长度的数据。以四字节对齐为例,就是只能访问0x0-0x3,0x4-0x7,0x8-0xc这样的(闭)区间,不能跨区间访问。如果真正需要访问的数据并没有占据那个区间的全部字节范围,还有另外的信号线来指出具体操作哪几个字节,类似于掩码的作用。好像也有些架构干脆就不允许这种部分访问,强制 Read More