内存连续的问题

现有几个结构体嵌套,内存对齐的情况下,结构体成员的所有数据在内存中是连续的吗

请高手解答一下,谢谢

------解决方案--------------------

不一定连续,特殊设计的才会连续。数据元素之间有可能被填充一些无用的数据以提升访问效率。

------解决方案--------------------

你说的继续是忽略对齐产生的填充数据吗?如果是的话,那么是连续的。

------解决方案--------------------

#include

#define field_offset(s,f) (int)(&(((struct s *)(0))->f))

struct AD  { int a; char b[13]; double c;};

#pragma pack(push)

#pragma pack(1)

struct A1  { int a; char b[13]; double c;};

#pragma pack(2)

struct A2  { int a; char b[13]; double c;};

#pragma pack(4)

struct A4  { int a; char b[13]; double c;};

#pragma pack(8)

struct A8  { int a; char b[13]; double c;};

#pragma pack(16)

struct A16 { int a; char b[13]; double c;};

#pragma pack(pop)

int main() {

printf("AD.a %d\n",field_offset(AD,a));

printf("AD.b %d\n",field_offset(AD,b));

printf("AD.c %d\n",field_offset(AD,c));

printf("\n");

printf("A1.a %d\n",field_offset(A1,a));

printf("A1.b %d\n",field_offset(A1,b));

printf("A1.c %d\n",field_offset(A1,c));

printf("\n");

printf("A2.a %d\n",field_offset(A2,a));

printf("A2.b %d\n",field_offset(A2,b));

printf("A2.c %d\n",field_offset(A2,c));

printf("\n");

printf("A4.a %d\n",field_offset(A4,a));

printf("A4.b %d\n",field_offset(A4,b));

printf("A4.c %d\n",field_offset(A4,c));

printf("\n");

printf("A8.a %d\n",field_offset(A8,a));

printf("A8.b %d\n",field_offset(A8,b));

printf("A8.c %d\n",field_offset(A8,c));

printf("\n");

printf("A16.a %d\n",field_offset(A16,a));

printf("A16.b %d\n",field_offset(A16,b));

printf("A16.c %d\n",field_offset(A16,c));

printf("\n");

return 0;

}

//AD.a 0

//AD.b 4

//AD.c 24

//

//A1.a 0

//A1.b 4

//A1.c 17

//

//A2.a 0

//A2.b 4

//A2.c 18

//

//A4.a 0

//A4.b 4

//A4.c 20

//

//A8.a 0

//A8.b 4

//A8.c 24

//

//A16.a 0

//A16.b 4

//A16.c 24

//

//

------解决方案--------------------

pack为1的时候是连续的。

------解决方案--------------------

#include

#include

typedef struct

{

char a;

int b;

int c

}A;

typedef struct

{

char a;

A   b;

int  c;

}B;

int main(void)

{

B test = {0};

printf("%x\n%x\n%x\n%x\n%x\n",&test.a,&test.b.a,&test.b.b,&test.b.c,&test.c);

system("PAUSE");

return 0;

}

22ff50

22ff54

22ff58

22ff5c

22ff60

排除字节对齐,内存中a b c肯定也是按顺序连在一起的

------解决方案--------------------

http://blog.csdn.net/lichunming83/archive/2009/10/31/4752818.aspx这有一些结构体方面的知识,仅供参考。

------解决方案--------------------

压缩的时候是连续的,比如tcp的结构体,ip的结构体等都是具体例子

------解决方案--------------------

使用编译器的选项可以输出类型的内存布局,比如VC的

连续和问题C语言,内存连续的有关问题相关推荐

  1. C语言中连续调用rand函数,返回值不变

    C语言中连续调用rand函数,返回值不变 最近用C语言随机函数编程发现了一个奇怪的现象: 简易版代码: #include<stdio.h> #include<stdlib.h> ...

  2. C语言实验指导(三)C语言AD连续采集数据实验

    第三章:C语言AD连续采集数据实验 文章目录 第三章:C语言AD连续采集数据实验 一.实验目的: 1.熟悉示波器和信号发生器的使用. 二.实验内容: 1.利用信号发生器产生一定频率的正弦波,并用示波器 ...

  3. 连续因子pta c语言,PTA --- L1-006 连续因子

    一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的 ...

  4. C语言内存管理超详解

    补充: 1.一个正在运行着的C编译程序占用的内存分为栈区.堆区.未初始化数据区(BBS).初始化数据区.代码区5个部分. (1)栈区:存放函数的参数值.局部变量的值.由编译器自动分配释放. (2)堆区 ...

  5. c语言相邻地址相差多少,C语言内存地址基础

    从计算机内存的角度思考C语言中的一切东东,是挺有帮助的.我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节.比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素. ...

  6. 图解Go语言内存分配 https://juejin.im/post/5c888a79e51d456ed11955a8

    图解Go语言内存分配 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理.这样可以自主地实现更好的内存使用模式,比如内存池.预分配等等.这样,不会每次内存分配都需要进行系 ...

  7. C语言与JAVA内存管理_深入理解C语言内存管理

    之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...

  8. c语言 linux sd_深入理解Linux C语言内存管理

    问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...

  9. C语言内存使用的常见问题及解决之道

    一  前言 本文所讨论的"内存"主要指(静态)数据区.堆区和栈区空间(详细的布局和描述参考<Linux虚拟地址空间布局>一文).数据区内存在程序编译时分配,该内存的生存 ...

最新文章

  1. [Python学习] 专题六.局部变量、全局变量global、导入模块变量
  2. oracle语句取字段前2位,oracle截取某一个字符之前或之后的值;substr();instr()
  3. mysql8.0提示命令_Mysql 8.0 相关命令
  4. 剑指 Offer 10- I. 斐波那契数列 (从重叠子问题到备忘录到dp数组迭代解法)
  5. react打包后图片丢失_使用 webpack 搭建 React 项目
  6. 终于有人把5G和边缘计算的关系说清楚了 | 技术头条
  7. LastPass 的开源替代品
  8. [转载]Oracle监听器安装与设置(2)
  9. 将系统常用程序一次性的都安装到位
  10. 让你的MSN更精彩!聊天伴侣小i机器人试用体验
  11. 编程软件有哪些比较好用
  12. 电脑没有声音,显示“未插入耳机或扬声器”,检测不到Realtek高清晰音频管理器...
  13. js数组倒序排列+字符串数组转为数字数组
  14. Oracle——03索引
  15. 【python数据挖掘课程】二十八.基于LDA和pyLDAvis的主题挖掘及可视化分析
  16. 中国科学院自动化所2020年考博经验分享
  17. web测试 (四)兼容性测试
  18. angularjs中ng-show与css中display:none的优先级问题
  19. 23.Flink-高级特性-新特性-Streaming Flie Sink\介绍\代码演示\Flink-高级特性-新特性-FlinkSQL整合Hive\添加依赖和jar包和配置
  20. 无线网络***(-)

热门文章

  1. python 初步学习
  2. FreeImage 结合 VB6 使用技巧
  3. bin和sbin区别
  4. python语法学习之对象与参考,局部与全局变量
  5. 【转】计算机科学中最重要的32个算法
  6. 金笛邮件-邮件连接数据库专题之oracle数据库
  7. 【收藏】ASP.NET英文技术文章推荐[10/28 – 11/3]
  8. 专注问题本身,不是在博客上陈述自己不会的事实!!!
  9. Codeforces Round #513 总结
  10. 解决 html5 input type='number' 类型可以输入e