![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程语言 C/C++
文章平均质量分 84
lixuehui848
这个作者很懒,什么都没留下…
展开
-
struct内存对齐 详解
结构体的对齐在sizeof计算一个结构体的大小时,经常得到的值比结构体内部成员所占内存总和要大,这就是因为在结构体内部,成员在存储时有对齐的规则。结构体对齐指的是:编译器向结构体插入无用内存的能力,插入无用内存使得结构体成员以最佳方式对齐,从而得到更高的效能。当基本数据类型以字节地址(几倍于自身大小)存储时,很多处理器能够获得最佳效能。以下是几个例子:Struct x{翻译 2012-05-23 23:30:56 · 760 阅读 · 0 评论 -
编译与链接之三——动态链接
链接分为静态链接和动态链接,前面我们介绍了静态链接,本文将介绍动态链接。动态链接的基本原理与静态链接其实一样,也是把各个目标文件连接到一起生生一个可执行的文件。只是链接时机不同而已。动态链接的思想与优点动态链接是什么呢,简单的说,不把各个模块连接在一起,而分成各自独立的模块,在运行之前不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接。也就是把链接的过程推迟到了运行时再链接,这原创 2012-11-18 15:34:15 · 520 阅读 · 0 评论 -
编译与连接之二——静态链接连接
连接通过编译过程,一个源文件(.c)就生成了一个对应的目标文件(.o)。一个工程,不可能是一个文件组成,从几十个到几百个,大的项目工程有成千上完个文件,这些文件通过编译,只是从源文件变成了目标文件,但是这些文件不能单独运行,各个文件(模块)之间存在一定的关系,要使工程正常工作,各个目标文件和库必须连接在一起,形成一个最终的可执行的文件。下面就详细介绍链接工作的过程。链接过程简单描述链接过程分为静态原创 2012-10-27 19:00:54 · 500 阅读 · 0 评论 -
编译与连接——编译
一个项目为什么就可以按照其设计思想运行,一个小的程序为什么就可以正确执行,一个printf()函数为什么就能打印出我们想要的东西……这一切究竟是什么样的过程?计算机都是做了什么工作?有写过程序的都会说:编写的程序编译成二进制代码,然后连接成可执行文件,计算机运行的可执行文件啊。流程是这样,但是有没有对这个过程感觉好奇呢?这究竟是一个什么样的过程呢,C程序究竟怎么变成的二进制文件?目标文件究竟怎样变原创 2012-09-09 22:47:11 · 787 阅读 · 0 评论 -
字符串,字符指针和字符数组的sizeof和strlen
1 基本定义 字符是构成源程序的基本要素。每个程序都是由一系列组合在一起有意义的字符构成的。字符常量是以单引号括起来的字符表示的整数值,即该字符在计算机字符集中的整数值。字符指针,是指向字符的指针。字符串是作为一个整体对待的一系列字符串,可以包含字母,数字和各种专门的字符;注意字符串常量是用双引号标识的。字符数组,即存储字符的数组,也就是数组的存储类型为字符。原创 2012-08-12 18:34:16 · 1456 阅读 · 0 评论 -
volatile浅谈
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。volatile变量的几种情况:1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)3转载 2012-05-10 23:35:41 · 313 阅读 · 0 评论 -
菜鸟与大神成员的区别
这是转载分享别人写的文章,很不错的一篇文章。算是作为自己的收藏也罢,算是为方便其他人看到这篇文章,而增加的一篇文章来源也罢,总之这是不错的文章,我看完后想了很多。为什么自己技术不如人而在公司得不到重用,为什么自己成不了大神级的程序员,这篇文章分析的很透彻——没有把自己的思想融入程序!!“菜鸟”和“大神”刚刚走出就业的程序员,技术是刚刚起步的基点。那下面我们就聊一聊有关技术的东西。首先请您先转载 2012-06-03 21:52:06 · 976 阅读 · 0 评论 -
多态 重载与覆盖
覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。有一下特点:1、覆盖时,方法名、参数列表、返回值都相同。2、子类方法不能缩小父类方法的访问权限。3、子类方法不能 抛出比父类方法更多的 异常(子类方法可以不抛出异常)4、被覆盖的方法不能为private,否则在其子类中原创 2012-05-30 23:39:57 · 432 阅读 · 0 评论 -
虚函数
二、虚函数在类的继承层次结构中,在不同的层次中可以出现同名同参(类型、个数)都相同的函数。在子类中调用父类的成员方法,可以使用子类对象调用时使用父类的作用域实现。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。举一个实例来说明使用虚函数与不使用虚函数的区别,基类和派生类中都有同名函数。不使用虚函数:Student.转载 2012-05-30 23:43:10 · 362 阅读 · 0 评论 -
typede与define 区别
typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 #define是预处理指令。typedef是C语言语句,其功能是用户为已有数据类型取“别名”。 例如: typedefint INTEGER; 这以后就可用INTEGER来代替int作整型变量的类型说明了,如: INTEGER a,b;转载 2012-05-27 13:26:00 · 712 阅读 · 0 评论 -
静态链接(库)与动态链接(库)
静态链接与动态链接静态链接是指:把库里面的函数在链接时就链接到执行文件中,即在可执行文件中嵌入了该文件所用到的库文件代码。在可执行文件运行时,链接的库文件代码会加载到内存。动态链接是指:库函数不会嵌入到可执行文件中,可执行文件获取库函数指针,在运行时才去链接库函数。简单的说,静态库和应用程序编译在一起,在任何情况下都能运行,而动态库是动态链接,顾名思义就是在应用程序启动的时候才会链接,原创 2012-05-12 22:51:24 · 518 阅读 · 0 评论 -
堆与栈
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。3、全局区(静态区)(static)—,全局转载 2012-05-25 22:36:20 · 272 阅读 · 0 评论 -
大端模式与小端模式
什么是大端模式和小端模式在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式。大端模式(big-endian):对于非char类型,例如整型和长整型,低地址存放数据的的高字节,高地址存放的是数据的低地址。小端模式(little-endian):对于整型、长整型,低地址存放的是数据的低位,高地址存放的是数据的高位。原创 2012-05-19 22:12:12 · 887 阅读 · 0 评论 -
链表逆转的一个算法
今天想到一个链表逆转的简单算法,向大家介绍一下。链表的定义大家都十分熟悉,我们不再累述。链表分文单链表和双向链表,谈到链表逆转,这里仅仅需要考虑单链表即可。因为双向链表的每个节点都有指向其前驱和后继的指针,用不到对其逆转。如下图表示的单链表:只需要额外定义三个临时节点指针,分别为crrt, pre和tail, crrt表示当前节点指针,pre表示前节点的前驱节点,tail表示当前节点后原创 2012-12-22 13:53:15 · 1724 阅读 · 0 评论