zoukankan      html  css  js  c++  java
  • 基础

     1 // pragma_pack.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <windows.h>
     6 #include <iostream>
     7 
     8 using namespace std;
     9 
    10 
    11 
    12 /*
    13 这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。
    14 
    15 #pragma pack (n)  //C编译器将按照n个字节对齐。
    16 #pragma pack ()   //取消自定义字节对齐方式。
    17 
    18 
    19 #pragma  pack (push,1)  //把原来对齐方式设置压栈,
    20                         //并设新的对齐方式设置为一个字节对齐
    21 
    22 #pragma pack(pop)       //恢复对齐状态
    23 
    24 因此可见,加入push和pop可以使对齐恢复到原来状态,而不是编译器默认,可以说后者更优,但是很多时候两者差别不大
    25 
    26 如:
    27 
    28 #pragma pack(push) //保存对齐状态
    29 
    30 #pragma pack(4)//设定为4字节对齐
    31 
    32 相当于 #pragma  pack (push,4)
    33 */
    34 
    35 //#pragma pack(1)
    36 //调整结构体的边界对齐,让其以一个字节对齐
    37 
    38 #pragma pack(push,1)
    39 
    40 
    41 typedef struct _A_
    42 {
    43     char a;
    44     double b;
    45 }A;
    46 
    47 //#pragma pack()
    48 
    49 #pragma pack(pop) 
    50 
    51 
    52 
    53 int main()
    54 {
    55     cout << sizeof(A) << endl;
    56 
    57     return 0;
    58 }

    对齐时:

    屏蔽代码时:

  • 相关阅读:
    list count++
    Java程序员常用工具类库
    Java读写Excel之POI超入门
    JS操作JSON总结
    ORACLE RAC 11G 添加以及删除UNDO表空间
    oracle 索引优化之distinct
    Redis常用的命令
    Linux 安装Redis 5.0(以及参数调优)
    OEM12C(12.1.0.5)安装插件监控mysql(linux)
    mysql版本升级
  • 原文地址:https://www.cnblogs.com/1228073191Blog/p/7452276.html
Copyright © 2011-2022 走看看