连续和问题C语言,内存连续的有关问题
内存连续的问题
现有几个结构体嵌套,内存对齐的情况下,结构体成员的所有数据在内存中是连续的吗
请高手解答一下,谢谢
------解决方案--------------------
不一定连续,特殊设计的才会连续。数据元素之间有可能被填充一些无用的数据以提升访问效率。
------解决方案--------------------
你说的继续是忽略对齐产生的填充数据吗?如果是的话,那么是连续的。
------解决方案--------------------
#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语言,内存连续的有关问题相关推荐
- C语言中连续调用rand函数,返回值不变
C语言中连续调用rand函数,返回值不变 最近用C语言随机函数编程发现了一个奇怪的现象: 简易版代码: #include<stdio.h> #include<stdlib.h> ...
- C语言实验指导(三)C语言AD连续采集数据实验
第三章:C语言AD连续采集数据实验 文章目录 第三章:C语言AD连续采集数据实验 一.实验目的: 1.熟悉示波器和信号发生器的使用. 二.实验内容: 1.利用信号发生器产生一定频率的正弦波,并用示波器 ...
- 连续因子pta c语言,PTA --- L1-006 连续因子
一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的 ...
- C语言内存管理超详解
补充: 1.一个正在运行着的C编译程序占用的内存分为栈区.堆区.未初始化数据区(BBS).初始化数据区.代码区5个部分. (1)栈区:存放函数的参数值.局部变量的值.由编译器自动分配释放. (2)堆区 ...
- c语言相邻地址相差多少,C语言内存地址基础
从计算机内存的角度思考C语言中的一切东东,是挺有帮助的.我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节.比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素. ...
- 图解Go语言内存分配 https://juejin.im/post/5c888a79e51d456ed11955a8
图解Go语言内存分配 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理.这样可以自主地实现更好的内存使用模式,比如内存池.预分配等等.这样,不会每次内存分配都需要进行系 ...
- C语言与JAVA内存管理_深入理解C语言内存管理
之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...
- c语言 linux sd_深入理解Linux C语言内存管理
问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...
- C语言内存使用的常见问题及解决之道
一 前言 本文所讨论的"内存"主要指(静态)数据区.堆区和栈区空间(详细的布局和描述参考<Linux虚拟地址空间布局>一文).数据区内存在程序编译时分配,该内存的生存 ...
最新文章
- [Python学习] 专题六.局部变量、全局变量global、导入模块变量
- oracle语句取字段前2位,oracle截取某一个字符之前或之后的值;substr();instr()
- mysql8.0提示命令_Mysql 8.0 相关命令
- 剑指 Offer 10- I. 斐波那契数列 (从重叠子问题到备忘录到dp数组迭代解法)
- react打包后图片丢失_使用 webpack 搭建 React 项目
- 终于有人把5G和边缘计算的关系说清楚了 | 技术头条
- LastPass 的开源替代品
- [转载]Oracle监听器安装与设置(2)
- 将系统常用程序一次性的都安装到位
- 让你的MSN更精彩!聊天伴侣小i机器人试用体验
- 编程软件有哪些比较好用
- 电脑没有声音,显示“未插入耳机或扬声器”,检测不到Realtek高清晰音频管理器...
- js数组倒序排列+字符串数组转为数字数组
- Oracle——03索引
- 【python数据挖掘课程】二十八.基于LDA和pyLDAvis的主题挖掘及可视化分析
- 中国科学院自动化所2020年考博经验分享
- web测试 (四)兼容性测试
- angularjs中ng-show与css中display:none的优先级问题
- 23.Flink-高级特性-新特性-Streaming Flie Sink\介绍\代码演示\Flink-高级特性-新特性-FlinkSQL整合Hive\添加依赖和jar包和配置
- 无线网络***(-)