zoukankan      html  css  js  c++  java
  • pack record /record 区别

    delphi中Record 和Packed Record的区别   .
    
    分类: delphi  2011-06-25 09:33 3669人阅读 评论(2) 收藏 举报 
    
    delphiinteger编译器windows
    
    
          Record 和Packed Record 第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐,而第二种带packed关键字的结构体表明编译器编译该结构体时不需要进行字对齐,这种方式对结构体中的字段访问会比第一种方式慢!但是更节约空间。有Packed 的占用内存小,但是速度慢一点。没Packed 的占用内存大,但是速度快一点   
    
         比如:        
    
         TA   =   record             
    
             a:   Char;             
    
             b:   Integer;         
    
         end;     
    
         和        
    
         TB   =   packed   record             
    
            a:   Char;             
    
            b:   Integer;         
    
         end;     
    
         中:     
    
         TA.b位于TA结构开始处第4个字节,   TB.b位于TB结构开始处第二个字节.   即TA结构中在TA.a和TA.b中间插了3个无用字节,   为TB.b在内存中的地址是按字对齐的--即这个地址能被4整除,   而TB中则没有这些无用字节,   但是TB.b不是字对齐的,   对它的访问比对TA.b慢.   
    
         例子1-----------------------------------------------------    
    
         type t=  packed record   和 type t=   record        
    
    a:char;  {1}                         a:char;{8}   --因为a的长度不够一个字(8个字节),                                                                   而紧接则的d为一个字(8个字节)所以要补齐8     
    
    d : double ;{8}                      d : double ;{8}     
    
    b:smallint;{2}                       b:smallint; {8}                  
    
    end;     :Sizeof(t) =13             end;    :  Sizeof(t) =24 的区别:看后面的注释{**} ;
    
    例子2------------------------------------  
    
     type t=  packed record     和    type t=   record        
    
    a:char;  {1}                         a:char;   //因为a的长度为1个字节,后面的b为两个字节累加3个字节,
    
                                                               //再后面d为8 个字节,所以a+b要补齐到8个字节     
    
    b:smallint;{2}                       b:smallint; a+b占8个字节(即一个字)       
    
    d : double ;{8}                      d : double ;{8}               
    
    end;     :Sizeof(t) =13             end;    : Sizeof(t) =16 的区别:看后面的注释{**} ;
    
         在Windows中内存的分配一次是4个字节的。而Packed按字节进行内存的申请和分配,这样速度要慢一些,因为需要额外的时间来进行指针的定位。因此如果不用Packed的话,Delphi将按一次4个字节的方式申请内存,因此如果一个变量没有4个字节宽的话也要占4个字节!这样就浪费了
    
  • 相关阅读:
    Java设计模式之单例模式
    sql查询优化整理
    MYSQL 调优学习笔记
    记一次失败的大厂面试
    ElasticSearch 6.3.2 整合 Springboot 2.1.10.RELEASE 版本,使用 Logstash 导入 mysql 数据
    ajax技术实现登录判断用户名是否重复以及利用xml实现二级下拉框联动
    浅谈 KMP 算法
    转载:Docker入门只需看这一篇就够了
    Spring Boot 监听 Activemq 中的特定 topic ,并将数据通过 RabbitMq 发布出去
    hadoop入门之海量Web日志分析 用Hadoop提取KPI统计指标
  • 原文地址:https://www.cnblogs.com/moonwind/p/4507628.html
Copyright © 2011-2022 走看看