zoukankan      html  css  js  c++  java
  • 内存对齐问题的解析

          存储器的内存布局一般都是对齐的,即是按字对齐或半字对齐的方式访问的,优点是可以避免内存的浪费同时也有很高的内存操作和数据处理的速度。

          如果访问非对齐的内存数据:

    1. 产生不可预测的结果;
    2. 忽略造成访问不对齐的低地址位;
    3. 上一步后,使这些低地址位控制装载数据循环后移。

    先看下面这些问题,你都知道这些结构体所占内存的大小以及结构体成员的实际内存分布吗?

    结构体所占内存和实际使用内存是两个完全不同的概念,

    结构体所占内存大小可以使用sizeof(type)测出,而实际使用的内存大小必须通过offsetof(type,member)测量偏移量来计算。使用说明如下:

    下面是一些练习:

     1 /*所占内存大小为8个字节*/
     2 struct node1
     3 {
     4     int a;      
     5     char b;     
     6     char c;     
     7 }stu1;
     8 /*所占内存大小为12个字节*/
     9 struct node2
    10 {
    11     char b;
    12     int a;
    13     char c;
    14 }stu2;
    15 /*所占内存大小为6个字节*/
    16 struct node3
    17 {
    18     char a;
    19     short b;
    20     char c;
    21 }stu3;
    22 /*所占内存大小为24个字节*/
    23 struct node4
    24 {
    25     long a;
    26     char *b;
    27     short c;
    28     char d;
    29     short array[5];
    30 }stud4
    31 /*这里含有柔性数组(不占内存),所占内存大小为8个字节*/
    32 struct node5
    33 {
    34     int a;
    35     char c;
    36     int array[];
    37 }stu5;
  • 相关阅读:
    C# Ini配置文件
    C#日志写入
    GZFramework.DB.Core初始化
    httpHelper
    GZFramework代码生成器插件使用教程
    MVC部署IIS设置
    SignalR记录
    洛谷 P2360 地下城主
    洛谷 P1379 八数码难题(map && 双向bfs)
    洛谷 P1155 双栈排序
  • 原文地址:https://www.cnblogs.com/philospy/p/4029870.html
Copyright © 2011-2022 走看看