涨知识---V

1.内存对齐

在解释内存对齐的作用前,先来看下内存对齐的规则:

1)、  对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数。

2)、  在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。(默认是8,所以就是结构体中最大长度成员的字节数)

#pragma pack(n) 表示设置为n字节对齐。 VC6默认8字节对齐

struct C{
    bool c1;
    int c2;
    bool c3;
};

struct D{
    int d1;
    bool d2;
    bool d3;
};

sizeof(C): 12   ,    sizeof(D):8

  C  在内存中:
    |bool|---|---|---|
    |-------int------|
    |bool|---|---|---|
    D 在内存中:
    |-------int------|
    |bool|bool|---|---|

struct A1{
    int a;
    static int b;
};

struct A2{
    int a;
    char c;
};

struct A3{
    float a;
    char c;
};

struct A4{
    float a;
    int b;
    char c;
};

struct A5{
    double d;
    float a;
    int b;
    char c;
};

sizeof(A1) = 4:因为静态变量是存在全局数据区,而sizeof计算栈中分配的大小,b是不会计算在内的。

*******************************************************************************************************************************************

*关于五大内存分区
*在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
*栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
*堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
*自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
*全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
*常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多,在《const的思考》一文中,我给出了6种方法)

*******************************************************************************************************************************************

sizeof(A2) = 8:为了照顾数据对齐

sizeof(A3) = 8:为了照顾数据对齐

sizeof(A4) = 12:为了照顾数据对齐

sizeof(A5) = 24:

第一步:成员按照规则1)对齐后,占20字节。 0(double)->8(float)->12(int)->16(char).

第二步:结构体自身按照规则2)对齐, sizeof(A5) = 3* min(pack_default, sizeof(double)) = min (8, 8) =3*  8 =24。

时间: 2024-10-25 16:38:32

涨知识---V的相关文章

[matlab] 涨知识

今天被师兄虐惨了之后,突然想到了matlab与c之间的关系,c语言中对数据的封装采用struct关键字,matlab是不是也有这个关键字呢?搜了一些还真有,如果早知道有关键字,我的matlab程序又可以简练一点了.今天真是涨知识啊. 如果有时间,我要好好研究一些matlab的struct和元胞数组这两个东西. 下面的网站比较好的解释了struct关键字: http://www.360doc.com/content/10/1115/20/3395531_69645960.shtml

涨知识!从一个简单的消息服务,看云计算架构的真容

一转眼,云计算已经十年了.十年间,从AWS亚马逊云开始,涌现了Salesforce.微软.谷歌.IBM.VMware.阿里.腾讯.网易等一批云计算服务商,从互联网公司到传统IT巨头都卷入了这场云计算的时代大潮中.Gartner数据显示,2016 年全球公有云服务市场规模有望达2,086 亿美元,较2015年的1,780 亿美元市场规模增长17.2%. 然而,虽然十年过去了,公有云市场也将超过2000亿美元规模,但很多人依然不明白,到底什么是云计算?云计算的架构与传统IT架构到底有何区别?本文就以

盘点10大儿童编程语言,涨知识!

浏览论坛时候看到这样的一篇文章<儿童编程语言的进化史>,由儿童编程的这一点小编想到:哪些编程语言适合儿童学习呢?于是,小编漫漫的探索,并进行了简单的统计分析.下面我们一起来看看有哪些编程语言是孩子可以玩的吧! 1Scratch Scratch 是由麻省理工学院媒体实验室 Lifelong Kindergarten 小组开发的一种编程语言和在线社区.Scratch 的服务是免费的,它允许你的孩子创建自己的动画,游戏和故事.你的孩子可以通过 Scratch 的在线社区与世界各地的其他人一同分享创造

涨知识-VI 基于TCP/UDP的应用层协议

基于TCP/UDP的应用层协议: 基于TCP: Telnet(Teletype over the Network, 网络电传),通过一个终端(terminal)登陆到网络 FTP(File Transfer Protocol 文件传输协议) SMTP(Simple Mail Transfer Protocol 简单邮件传输协议),用来发送电子邮件 POP3(Post Office Protocol 3)邮件读取协议,协议通常被用来接受电子邮件 HTTP HTTPS 基于UDP: NFS(net

涨知识,涨知识 :ThinkPHP框架下Where条件查询Mysql数据库某字段是否为空

代码虐我千百遍,我对代码如初恋~ 问题: 查询某字段app_date数据是否为NULL,正常我们实现的办法是: $map['app_data'] = array('eq','null'); $data = M("Info") -> field("*") -> where($map) -> select() 利用echo  M("Info")->getLastSql();  打印sql语句如下: SELECT `id`,`n

涨知识 - 1

1.(2分)对于多关键字而言,那种文件组织方便而又高效(B) A.顺序文件 B.倒排文件 C.散列文件 D.B+树索引文件 解析:答案 B. 文件在外存上的基本的组织方式有四种:顺序组织,索引组织,散列组织和链组织;对应的的文件名称分别为:顺序文件.索引文件.散列文件和多关键字文件.选择哪一种文件组织方式,取决于对文件中记录的使用方式和频繁程度.存取要求.外存的性质和容量. 多关键字文件:包含有多个次关键字索引的文件称为多关键字文件. 倒排表的主要优点是:在处理复杂的多关键字查询时,可在倒排表中

涨知识 --- VI

1.空类所占空间大小 空类所占空间为1,单一继承的空类空间也为1,多继承的空类空间还是1.但是虚继承涉及虚表(虚指针),所以sizeof(C)的大小为4. 2.内联函数与宏定义 Ans:内联函数和普通函数相比可以加快程序运行速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌到目标代码中.而宏只是一个简单的替换. 所谓的嵌入代码,是指在调用函数的地方把所需要的函数代码直接写到那里去.对于短小的代码来说,inline可以带来一定的效率提升,而且和C时代的宏函数相比,inline更加安全可靠.

涨知识!5个简单直观的网页设计对比技巧

对比是视觉设计中非常常用以及常见的设计技巧之一,甚至我个人觉得对比是设计中最最重要的要点. 今天会给大家介绍5种直观简单的对比方法. 如果能熟练理解和掌握,相信会对大家的日常设计中起到非常大的作用和帮助. 现任数美互动创意总监,曾任职于IM2.0 DDB 新意互动 等国际4A广告公司,担任互动美术指导,资深互动美术指导. 1. 大小对比 首先我们先看几个事例. 大小对比通过突出应该突出的信息和内容,在功能上可以更好的突出内容,在设计形式可以形成不同的版式结构,更佳绝有设计感. 实例演示,我们如何

JavaScript下的setTimeout(fn,0)的作用,涨知识了

在工作学习中,我看到团队中的有些大神的代码中不时的出现setTimeout(fn,0):这样的写法,很好奇,这样写的作用是什么,在网上,经过一位网友无私耐心地阐述,我才对js单线程的机制有了更深的认识,此处我引上链接,与君共勉! http://www.cnblogs.com/silin6/p/4333999.html