深圳冰川网络Visual C++面试经验

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:42   1777   0

自我介绍

你期望的薪资

结构体所占存储空间

http://www.cnblogs.com/-zhangnian/p/6422559.html

空的类是会占用内存空间的,而且大小是1,原因是C++要求每个实例在内存中都有独一无二的地址。

(一)类内部的成员变量:

普通的变量:是要占用内存的,但是要注意对齐原则(这点和struct类型很相似)。

static修饰的静态变量:不占用内容,原因是编译器将其放在全局变量区。

(二)类内部的成员函数:

普通函数:不占用内存。

虚函数:要占用4个字节,用来指定虚函数的虚拟函数表的入口地址。所以一个类的虚函数所占用的地址是不变的,和虚函数的个数是没有关系的

再举个例子,看看在默认对齐规则下,各结构体成员的对齐规则:

  1. //by www.datahf.net zhangyu
  2. typedef struct A
  3. {
  4. char c; //1个字节
  5. int d; //4个字节,要与4字节对齐,所以分配至第4个字节处
  6. short e; //2个字节, 上述两个成员过后,本身就是与2对齐的,所以之前无填充
  7. }; //整个结构体,最长的成员为4个字节,需要总长度与4字节对齐,所以, sizeof(A)==12
  8. typedef struct B
  9. {
  10. char c; //1个字节
  11. __int64 d; //8个字节,位置要与8字节对齐,所以分配到第8个字节处
  12. int e; //4个字节,成员d结束于15字节,紧跟的16字节对齐于4字节,所以分配到16-19
  13. short f; //2个字节,成员e结束于19字节,紧跟的20字节对齐于2字节,所以分配到20-21
  14. A g; //结构体长为12字节,最长成员为4字节,需按4字节对齐,所以前面跳过2个字节,
  15. //到24-35字节处
  16. char h; //1个字节,分配到36字节处
  17. int i; //4个字节,要对齐4字节,跳过3字节,分配到40-43 字节
  18. }; //整个结构体的最大分配成员为8字节,所以结构体后面加5字节填充,被到48字节。故:
  19. //sizeof(B)==48;

具体的分配图如下:

https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-fa5e2e096d40c958c6eb4de3ade2d08a

设计模式

Map的erase方法

常量指针与指针常量

Class A{

Int value {return 0;}

}

A* const p1=new A();

Const A* p2=new A();

Cout<<p1->value<<p2->value()<<endl;

P1=p2;

A* const p3=0;

Cout<<p3->value();

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP