回看C++基本语法

1、内存对齐
  为什么要内存对齐?
    内存对齐,CPU通过寄存器一次读取完成的字节数
    如果一个值跨过两次读取,就需要读取两次寄存器,并把这两次寄存器放在一个寄存器中
  内存对齐规则
    对于结构(或联合)的各个成员,第一个成员位于偏移为0,以后每个数据成员的偏移量必须是#pragma pack指定的数值和结构体(或联合)中最大数据成员长度 这2个数值中较小的一个的倍数。
    使用伪代码表示: min(#pragma pack, 结构最大数据成员长度) * N
    在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐也按照#pragma pack指定的数值和结构(或联合)最大数据成员长度这2个数值中较小的一个进行。
    如果没有使用#pragma pack指令来显式的指定内存对齐的字节数,则按照默认字节数来对齐,各个平台的默认对齐规则如下:32位CPU默认按照4字节对齐;64位CPU默认按照8字节对齐。

2、define 两个注意点:
  1 ()使用
  2 每个元素是否有计算
    #ABCD <==> "ABCD"
    A##B <==> AB
  #define CALL_WITH_MAX(a,b) f((a) > (b) ? (a) : (b))
  int a = 5;
  int b = 0;
  CALL_WITH_MAX(++a, b); //a被累加两次
  CALL_WITH_MAX(++a, b + 10); //a被累加一次

3、const用法

  const在*左边,不能修改指针所指向的内容
  const在*右边,不能修改指针
  const in* p; p的内容为常量
  int * const p; p为常量

猜你喜欢

转载自www.cnblogs.com/dianrain/p/10611404.html