Fork me on GitHub

08 2018 档案

摘要:前言 数据是怎么写道磁盘的? 代码里面我们一个读写调用似乎就能将数据从磁盘读写。仿佛代码是直接和磁盘打交道。以我们最常见的笔记本、或台式机的磁盘SATA盘为例,其受南桥上ATA控制器支配,这里面传输的ATA指令。至少我们代码里面是没有处理这部分的,所以我们代码直接操控磁盘说不通。现实情况是,C++通 阅读全文
posted @ 2018-08-30 09:53 克拉默与矩阵 阅读(1335) 评论(0) 推荐(0) 编辑
摘要:无论是pure virtual还是impure virtual,都允许子类override他。但是真两种方式还是有一点差别,如果是pure virtual,那么父类是十分强烈希望子类override他;如果是impure virtual,那么父类可以自己提供一种实现,子类可以不用重写而使用父类的,如 阅读全文
posted @ 2018-08-29 23:34 克拉默与矩阵 阅读(467) 评论(0) 推荐(0) 编辑
摘要:转自:https://blog.csdn.net/haoel/article/details/1948051 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型指针指向其子类的实例,然后通过父类型指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是 阅读全文
posted @ 2018-08-29 22:21 克拉默与矩阵 阅读(334) 评论(0) 推荐(0) 编辑
摘要:前言 虚函数执行速度要稍慢一些。为了实现多态性,每一个派生类中均要保存相应虚函数的入口地址表,函数的调用机制也是间接实现。所以多态性总是要付出一定代价,但通用性是一个更高的目标。 实验环境 Windows10 企业版 Visual Studio2017 15.8.1 引入虚函数后内存大小变化 没有虚 阅读全文
posted @ 2018-08-28 23:43 克拉默与矩阵 阅读(224) 评论(0) 推荐(0) 编辑
摘要:转自:https://blog.csdn.net/u011511601/article/details/53504355 Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执行。每个文件(模块)都可以任意写一些没有缩进的代码,并在载入时自动执行。为了区分 主执行代码和被调用 阅读全文
posted @ 2018-08-25 21:12 克拉默与矩阵 阅读(1498) 评论(0) 推荐(0) 编辑
摘要:智能域名解析 智能域名解析只有Linux DNS服务器才有。下面给出2种智能域名解析应用场景。 应用场景1 整个互联网由众多ISP组成,在中国就是联通、电信、移动等等 各家ISP内部网络四通八达,速度也很快。但是ISP之间的网络速度就比较慢了。ISP内部有机房,方便那些不想自己维护服务器的公司托管自 阅读全文
posted @ 2018-08-24 17:03 克拉默与矩阵 阅读(1059) 评论(0) 推荐(0) 编辑
摘要:介绍 DNS服务至关重要,你我每天访问网站不可能是记忆IP地址。因此DNS服务器的可靠性至关重要。下面介绍DNS服务器容错机制,看图 为了防止DNS服务器故障不再提供服务,引入辅助DNS服务器。辅助DNS上面的记录与主DNS服务器一样,图中画一个只是示意,现实中不止一个。 辅助DNS服务器复制主DN 阅读全文
posted @ 2018-08-24 16:12 克拉默与矩阵 阅读(878) 评论(0) 推荐(0) 编辑
摘要:域名解析委派 域名解析委派和DNS域名解析递归查询很像,举个例子解释域名解析委派 ①假设在.net域名下有台计算机想要访问www.cac.com。 ②.net这台DNS服务器不知道www.cac.com对应的IP,于是请求根DNS服务器 ③根DNS服务器也不知道www.cac.com对应的IP,但是 阅读全文
posted @ 2018-08-24 15:48 克拉默与矩阵 阅读(5056) 评论(0) 推荐(0) 编辑
摘要:前言 有一台Linux机器作为DNS服务器,查看这台机器上的DNS文件,发现指向互联网上的DNS服务器。 [root@ziqiang named]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 8.8.8.8 names 阅读全文
posted @ 2018-08-23 22:23 克拉默与矩阵 阅读(22969) 评论(0) 推荐(0) 编辑
摘要:前言 正向查找区,就是我们最熟知的DNS。即根据域名解析成IP 逆向查找区,即根据IP解析成域名。 他们之间的关系很像ARP和RARP 正向查找区 /etc/named.rfc1912.zones用于存储正向查找区的设置 添加一个cac.com区域 [root@ziqiang named]# cat 阅读全文
posted @ 2018-08-23 16:07 克拉默与矩阵 阅读(1856) 评论(0) 推荐(0) 编辑
摘要:前言 DNS服务——服务端 和 客户端 配置 介绍了如何在DNS安装DNS服务,更改一下配置文件就可以依据根提示解析全球域名。既然使用互联网上的DNS服务器就可以解析全球域名,为何还要自掏腰包搭建DNS服务器呢?有2点原因: ①解析内网服务器域名②降低内网域名解析流量 解析内网服务器域名 使用互联网 阅读全文
posted @ 2018-08-23 15:21 克拉默与矩阵 阅读(4883) 评论(0) 推荐(0) 编辑
摘要:拓展:如何增加一个系统服务service chkconfig本身用法不复杂,其作用是控制service是否开机启动。 对于CentOS而言,7.X版本已经不再使用SysV,SysV相关的命令基本上没有用武之地,这个命令早晚都会淘汰。 SysV脑图 阅读全文
posted @ 2018-08-23 10:04 克拉默与矩阵 阅读(311) 评论(0) 推荐(0) 编辑
摘要:参考:Linux下DNS主从服务器搭建详解 前言 电脑经常会出现一些网络小毛病。有的时候,QQ能正常上网,但是网页却打不开。这种时候十有八九是DNS出问题了。 QQ在DNS不可用的时候,可以跳过DNS解析,直接访问对方IP 实验环境 rhel-server-6.4-x86_64-dvd(ED2000 阅读全文
posted @ 2018-08-22 23:35 克拉默与矩阵 阅读(1781) 评论(0) 推荐(0) 编辑
摘要:212 阅读全文
posted @ 2018-08-22 21:20 克拉默与矩阵 阅读(246) 评论(0) 推荐(0) 编辑
摘要:转载注明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9520341.html 实验环境 rhel-server-6.4-x86_64-dvd(ED2000.COM).iso 注意: 对于使用VMware虚拟机进行实验,需要关闭针对某个WMNet的DHCP设 阅读全文
posted @ 2018-08-22 20:57 克拉默与矩阵 阅读(8265) 评论(0) 推荐(0) 编辑
摘要:转自:Yum安装报错:ERROR:dbus.proxies 环境: [红帽企业Linux.6.4.服务器版].rhel-server-6.4-x86_64-dvd(ED2000.COM).iso 安装时选用Software Development Workstation 问题描述: yum安装DHC 阅读全文
posted @ 2018-08-22 19:32 克拉默与矩阵 阅读(567) 评论(0) 推荐(0) 编辑
摘要:传输速率 内部传输速率 磁盘的内部传输速率指的是磁头读写磁盘时的最高速率。这个速率不包括寻道以及等待扇区旋转到磁头下所耗费时间的影响。它是一种理想情况,即假设磁头读写的时候不需要换道,也不专门读取某个扇区,而是只在一个磁道上连续地循环读写这个磁道的所有扇区,此时的速率就叫做硬盘的内部传输速率。 实际 阅读全文
posted @ 2018-08-21 16:39 克拉默与矩阵 阅读(674) 评论(0) 推荐(0) 编辑
摘要:冯.诺依曼体系结构 从Linux 服务器开发视角来看计算机,都是符合冯.诺依曼体系结构的。 共分为4大部分: ①输入、输出设备 输入设备:向计算机输入数据,比如 通过摄像头、MIC,将图像/声音等转成二进制数据给计算机 从网卡输入数据给计算机等 其它 输出设备:从计算机输出数据,比如 通过显示器、扬 阅读全文
posted @ 2018-08-21 13:50 克拉默与矩阵 阅读(3577) 评论(0) 推荐(0) 编辑
摘要:多态性 多态性是面向对象程序设计的关键技术之一。若程序设计语言不支持多态性,不能称为面向对象的语言。利用多态性技术,可以调用同一个函数名的函数,实现完全不同的功能。 多态性(polymorphism)多态性是考虑在不同层次的类中,以及在同一类中,同名的成员函数之间的关系问题。函数的重载,运算符的重载 阅读全文
posted @ 2018-08-20 22:36 克拉默与矩阵 阅读(332) 评论(0) 推荐(0) 编辑
摘要:同名隐藏 一旦子类定义了与父类同名的方法,则父类里面该名字的所有方法都被隐藏了。必须显示指定是父类的方法才可以 #include<iostream> using namespace std; class Base { public: Base() :x(0) {} ~Base() {} void s 阅读全文
posted @ 2018-08-20 21:16 克拉默与矩阵 阅读(339) 评论(0) 推荐(0) 编辑
摘要:一种错误的观念: 子类继承父类,只把父类的公有成员继承下来,私有的不会继承。 事实上无论是如何继承,都会把父类的所有成员继承下来。 1 #include<iostream> 2 using namespace std; 3 4 class Base { 5 private: 6 int x; 7 } 阅读全文
posted @ 2018-08-20 17:00 克拉默与矩阵 阅读(488) 评论(0) 推荐(0) 编辑
摘要:C++ new Complex类 String类 C++ delete Comlex类 String类 array new 一定要搭配array delete VC架构下new内存分配演绎 Linux架构下内存分配原理类似,这里以Windows平台VC下内存分配为例。 上下cookie主要用于记录分 阅读全文
posted @ 2018-08-19 22:13 克拉默与矩阵 阅读(325) 评论(0) 推荐(0) 编辑
摘要:静态成员 由关键字static修饰说明的类成员,称为静态类成员(static class member)。虽然使用static修饰说明,但与函数中的静态变量有明显差异。类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用的内存中。 静态成员又分为静态成员函数,静态成员数据 静态数据 阅读全文
posted @ 2018-08-17 21:01 克拉默与矩阵 阅读(184) 评论(0) 推荐(0) 编辑
摘要:转自:宏与分号 细节决定成败! 如果留心的话,可以看到 linux内核代码经常有这么奇怪的宏定义: 引用 #define wait_event(wq, condition) do { if (condition) break; __wait_event(wq, condition); } while 阅读全文
posted @ 2018-08-16 22:59 克拉默与矩阵 阅读(627) 评论(0) 推荐(0) 编辑
摘要:原文:C语言字节对齐问题详解 结构体字节对齐的细节和具体编译器实现相关,但一般而言满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体每个成员相对结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal 阅读全文
posted @ 2018-08-16 15:23 克拉默与矩阵 阅读(346) 评论(0) 推荐(0) 编辑
摘要:定义与声明的关系,其实“强弱符号关系”。 谁是强符号,谁是弱符号 函数定义:强符号 函数声明:弱符号 初始化了的全局变量:强符号,我们常将这种称为定义 未初始化的全局变量:弱符号,我们常将这种称为声明 强弱符号的统一规则 ①不能允许重复出现同名的强符号,但是允许重复出现有同名的弱符号 在a.c中同时 阅读全文
posted @ 2018-08-15 23:11 克拉默与矩阵 阅读(1447) 评论(0) 推荐(0) 编辑
摘要:Linux下c内存映像 大方向分为 应用空间 + 内核空间 他俩内存空间布局差不多。这里重点回顾分析应用空间布局,应用空间分为:代码段 + 数据段(静态数据段+动态数据段) 代码段 为啥是只读的 代码段在编译时就定好了,在程序的运行过程中,不能在代码段去开辟空间,以及释放空间。 包含哪几部分 ELF 阅读全文
posted @ 2018-08-15 22:38 克拉默与矩阵 阅读(565) 评论(0) 推荐(0) 编辑
摘要:复杂C源码中,往往可以经常看到各种宏的比较深入的用法,所以我们这里举一些宏的比较高级的、比较深入的用法的例子。 使用宏来代替简短函数 参考:C++——引用 例子 #include <stdio.h> void exchange(int *p1, int *p2) { int tmp = 0; tmp 阅读全文
posted @ 2018-08-14 22:53 克拉默与矩阵 阅读(299) 评论(0) 推荐(0) 编辑
摘要:由于C++兼容C语法,所以C的条件编译,在C++中也适用。 什么是条件编译 从“条件编译”这个名字上就能看出,所谓“条件编译”其实就是“按照条件去编译”。也就是“预编译”时,预编译器处理“条件编译”时,可以通过“条件编译”帮你保留某些代码、以及帮你去掉某些代码,第二阶段编译时就只编译保留的代码。一般 阅读全文
posted @ 2018-08-14 22:53 克拉默与矩阵 阅读(1370) 评论(0) 推荐(1) 编辑
摘要:phony target Makefile的语法很简单 目标、先决条件、命令 构成了Makefile的全部规则 一般而言,说到目标总给人一种非要产生么东西出来的感觉,如果带着这种感觉理解phony target(伪目标)可能有些吃力。更好的一种理解是将phony target理解成一个动作,动作的特 阅读全文
posted @ 2018-08-12 23:43 克拉默与矩阵 阅读(1019) 评论(0) 推荐(0) 编辑
摘要:前言 一个项目,拥有成百上千的源程序文件,编译链接这些源文件都是有规则的。Makefile是整个工程的编译规则集合,只需要一个make命令,就可以实现“自动化编译”。make是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual 阅读全文
posted @ 2018-08-12 23:18 克拉默与矩阵 阅读(586) 评论(0) 推荐(1) 编辑
摘要:参考:https://www.cnblogs.com/kongzhongqijing/p/5784293.html 阅读全文
posted @ 2018-08-12 22:33 克拉默与矩阵 阅读(163) 评论(0) 推荐(0) 编辑
摘要:主流发行版 1. Red Hat Linux Red Hat 公司一直是Linux 乃至开源世界的领导者。其有两个不同的发行版本: 一个商用版,称为Red Hat Enterprise Linux,专注于企业应用,并提供全套技术支持; 另一个是免费开源版,称为Fedora ,其开发依托于Linux 阅读全文
posted @ 2018-08-12 20:25 克拉默与矩阵 阅读(205) 评论(0) 推荐(0) 编辑
摘要:前言 UDP是User Datagram Protocol的缩写,直译为用户数据报协议。 UDP是不可靠传输协议,没有连接和应答机制,导致UDP在发送数据时,根本不清楚通信线路的连通状态,所以UDP传输数据时,无法保证数据一定能发送给对方。 每次传输数据时,必须指定对方的IP和端口。对于UDP来说, 阅读全文
posted @ 2018-08-12 13:39 克拉默与矩阵 阅读(870) 评论(0) 推荐(0) 编辑
摘要:前言 使用TCP通信时,TCP协议要求必须要有一个服务器端。这一点是由TCP协议本身的特性决定的,只要你使用TCP协议来通信,就必须要有一个TCP服务器端。 TCP服务器的大概工作过程 (1)服务器会使用专门“文件描述符”来监听客户的“三次握手”,然后建立连接。 (2)一旦连接建立成功后,服务器会分 阅读全文
posted @ 2018-08-11 10:34 克拉默与矩阵 阅读(1905) 评论(0) 推荐(0) 编辑
摘要:本机进程间通信 与 网络通信 本机进程间通信 实现本机内部的进程间的通信,通信时需要使用专门IPC机制,比如信号、管道(无名、有名)、system V IPC,(消息队列、共享内存、进程信号量)。这些参考前面文章 网络通信 网络通信也被称为网络IPC,直译就是网络进程间通信,简称网络通信,说白了就是 阅读全文
posted @ 2018-08-10 20:36 克拉默与矩阵 阅读(230) 评论(0) 推荐(0) 编辑
摘要:普通读写文件方式的缺点 使用文件IO的read/write来进行文件的普通读写时,函数经过层层的调用后,才能够最终操作到文件,以读(read函数)为例: 上图把驱动层的代码算在OS层了,以上画的只是一个示意的过程,并不代表函数就叫这个名字。在读写时中间会有很多的调用过程,数据需要在不同的缓存间倒腾, 阅读全文
posted @ 2018-08-10 15:49 克拉默与矩阵 阅读(1026) 评论(0) 推荐(1) 编辑
摘要:回顾同时读键盘、鼠标的方法 ①多进程 参考:高级IO——非阻塞IO ②多线程 参考:高级IO——非阻塞IO ③将“读鼠标”和“读键盘”设置为非阻塞 参考:高级IO——非阻塞IO ④多路IO(select、poll机制) 参考:高级IO——多路IO ⑤异步IO ③④都是单线的 异步IO的原理 ①~④都 阅读全文
posted @ 2018-08-10 15:08 克拉默与矩阵 阅读(2339) 评论(0) 推荐(0) 编辑
摘要:如何解决同时“读鼠标”和“读键盘”的问题 1)多进程实现 2)多线程 3)将“读鼠标”和“读键盘”设置为非阻塞实现 4)多路IO 前三种实现参考高级IO——非阻塞IO 有关多路IO 多路IO的工作原理 使用多路IO时,不需要多进程、多线程以“多线任务”方式实现,也不需要用到非阻塞,那么多路IO的实现 阅读全文
posted @ 2018-08-10 10:13 克拉默与矩阵 阅读(353) 评论(0) 推荐(0) 编辑
摘要:文件锁也被称为记录所,文件锁如果深讲的话,内容不少(比如文件锁最起码分为了建议锁和强制性锁,暂时挖坑,后面填)。 文件锁作用 顾名思义,就是用来保护文件数据的。当多个进程共享读写同一个文件时,为了不让进程们各自读写数据时相互干扰,我们可以使用进程信号量来互斥实现,除了可以使用进程信号量以外,还可以使 阅读全文
posted @ 2018-08-09 21:35 克拉默与矩阵 阅读(846) 评论(0) 推荐(0) 编辑
摘要:读某些文件时,如果文件没有数据的话,往往会导致读操作阻塞(休眠)。比如 ①读鼠标、键盘等字符设备文件 读键盘阻塞 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 5 int main(void) 6 { 7 char b 阅读全文
posted @ 2018-08-09 20:14 克拉默与矩阵 阅读(1425) 评论(0) 推荐(0) 编辑
摘要:所有的线程共享相同的信号处理方式 主线程将SIGINT信号的处理方式设置为了捕获,那么所有的次线程共享这一处理方式,如果其中某个次线程改变了该信号的处理方式,那么所有的线程将共享这一改变。 回顾“信号屏蔽字”和“未决信号字” 作用 “信号屏蔽字”和“未决信号字”作用同进程信号,参考IPC——信号 修 阅读全文
posted @ 2018-08-09 18:01 克拉默与矩阵 阅读(141) 评论(0) 推荐(0) 编辑
摘要:人类社会的friend VS C++世界的friend 现实世界中,我们自己很多物品,朋友是可以使用的,但是陌生人就不行。那么money,朋友可以随便拿吗?这要是你和friend的关系深浅而定。人类社会friend多多少少还是会有些限制。而C++中的friend才是真正的friend,class中的 阅读全文
posted @ 2018-08-08 17:18 克拉默与矩阵 阅读(370) 评论(0) 推荐(0) 编辑
摘要:参考 C++——overloading principle analysis operator overloading C语言中,对一个东西进行操作一定要涉及到一个函数,对于自定义类型,为了实现其四则运算你必须给出相应函数,而不能简单使用+=*/等operator。C++考虑到书写习惯,允许对ope 阅读全文
posted @ 2018-08-08 17:17 克拉默与矩阵 阅读(302) 评论(0) 推荐(0) 编辑
摘要:原始代码 1 #include<iostream> 2 using namespace std; 3 class Test { 4 public: 5 //以参数列表形式对数据成员进行初始化 6 Test(int d = 0) :data(d) 7 { 8 cout << "Create Test 阅读全文
posted @ 2018-08-08 14:07 克拉默与矩阵 阅读(490) 评论(0) 推荐(0) 编辑
摘要:资源保护 进程的资源保护 对于进程来说,由于每个进程空间是完全独立的,相互间不可能篡改对方进程空间的数据,所以进程空间内部的数据(资源)保护的非常到位,不需要加什么额外的保护机制。只有当它们共享操作第三方资源时才会涉及到资源保护问题,比如共享操作第三方文件(或者共享内存)的数据时,才会使用到进程信号 阅读全文
posted @ 2018-08-07 22:17 克拉默与矩阵 阅读(1838) 评论(0) 推荐(0) 编辑
摘要:推荐阅读:加州大学圣迭戈分校Thread讲义 Process - (Kernel) Thread (Lightweight processes - LWP) 进程缺点 为了让每个进程有一个安全的独立进程空间,OS使用了虚拟内存机制,通过虚拟内存机制,能够让每一个进程都有完全独立的进程空间。这种独立的 阅读全文
posted @ 2018-08-07 10:11 克拉默与矩阵 阅读(348) 评论(0) 推荐(0) 编辑
摘要:Big Three C++ 中Big Three指的是copy ctor 和 copy op= 和 dtor m_data是个字符串指针。一般而言,处理字符串,都是使用指针,在需要存储字符的时候再创建内存,这是因为字符串的长度有大有小,指针的处理方式有种动态的感觉。使用数组的话,则无法准确设置字符串 阅读全文
posted @ 2018-08-06 12:44 克拉默与矩阵 阅读(1319) 评论(0) 推荐(0) 编辑
摘要:转载请注明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9427555.html pass by value vs. pass by reference (to const) pass by value是整包传递,不管这个包多大。传的动作实际上是压到funt 阅读全文
posted @ 2018-08-05 22:11 克拉默与矩阵 阅读(1254) 评论(0) 推荐(0) 编辑
摘要:What is constructor C++中,如果你想要创建一个object,有一个函数会自动被调用(不需要programmer显式调用 ),这个函数就是constructor; constructor的写法很独特,其function name必须和class name相同; construct 阅读全文
posted @ 2018-08-05 21:30 克拉默与矩阵 阅读(3534) 评论(0) 推荐(0) 编辑
摘要:原文链接:OpenCV--矩阵的掩膜操作 参考链接:OpenCV探索之路(十三):详解掩膜mask 我的实验代码 法1 #include<opencv2/opencv.hpp> #include<iostream> #include<math.h> using namespace cv; int m 阅读全文
posted @ 2018-08-05 14:54 克拉默与矩阵 阅读(836) 评论(0) 推荐(0) 编辑
摘要:1.引入头文件 共性 #include<> 与 #include" "区别? 前者常用来包含系统提供的头文件,编译器会到保存系统标准头文件的位置查找头文件;后者常用于包含程序员自己编写的头文件,用这种格式时,编译器先查找当前目录是否有指定名称的头文件,然后从标准头目录中进行查找。 防卫式声明,C,C 阅读全文
posted @ 2018-08-04 19:29 克拉默与矩阵 阅读(629) 评论(0) 推荐(0) 编辑
摘要:涉及API imread 原型 CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR ); 功能 加载图像文件成为一个Mat对象。OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载 参数 fil 阅读全文
posted @ 2018-08-04 18:54 克拉默与矩阵 阅读(220) 评论(0) 推荐(0) 编辑
摘要:开发环境 VS 2017 15.7.6 OpenCV 3.4.1 搭建环境 设置环境变量 创建Win32 空项目 配置属性管理器 测试代码 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; int main(int 阅读全文
posted @ 2018-08-04 17:26 克拉默与矩阵 阅读(296) 评论(0) 推荐(0) 编辑
摘要:编译4个过程:预处理,编译,汇编,连接。宏就是在预处理阶段发挥作用。 宏结尾没有;,因为凡是;结尾的东西,都是由第二阶段“编译”来处理的(a.i->a.s),而所有预编译的代码都是在预编译阶段处理的,为了以示区分,所以所有预编译的代码都不需要分号结尾。 宏有两种,一种是有宏体宏,另一种是无宏体宏。 阅读全文
posted @ 2018-08-04 09:41 克拉默与矩阵 阅读(663) 评论(0) 推荐(0) 编辑
摘要:对比参考:剖析.o文件ELF组成 相比.o的ELF格式,有哪些变化? .rel.text和.rel.data消失了 为什么这两个节会消失? 链接器将各.o中同名的.text和.data节整合到一起时,会对整合后的.text和.data进行重定位。其实重定位时主要针对就是.text和.data节,不过 阅读全文
posted @ 2018-08-03 20:17 克拉默与矩阵 阅读(1373) 评论(0) 推荐(0) 编辑
摘要:参考:剖析.o文件ELF组成 目标文件 .symtab中记录的符号是从.s文件来的,所以.s这个汇编文件很关键。 .symtab所记录符号的种类 示例代码 a.c extern int a_va1 = 100; static float a_va2 = 200.0; static void a_fu 阅读全文
posted @ 2018-08-03 16:43 克拉默与矩阵 阅读(2183) 评论(0) 推荐(0) 编辑
摘要:目标文件种类 有三种 ①可重定位目标文件 被用于静态链接的文件,都是可重定位目标文件。根据这个概念,静态库文件(.a/.lib)和.o文件都是“可重定位目标文件”,因为它们都是静态链接的。 疑问:为什么称为“可重定位”? 因为静态连接时,逻辑地址需要被重定位为运行地址,所以就被称为可重定位目标文件。 阅读全文
posted @ 2018-08-03 11:47 克拉默与矩阵 阅读(588) 评论(0) 推荐(0) 编辑
摘要:ELF文件结构组成 ①总共13个节 ②每个节都有一个编号。从ELF头开始编号,编号从0开始,编号的作用就是用来索引(找到)不同节的。 ③每个.o的都是这样的结构。链接时要做的就是,将ELF格式的.o全部合成为一个完整的ELF格式可执行文件。 ④.o中每个节的逻辑地址都是从0开始的 ELF头 ELF格 阅读全文
posted @ 2018-08-03 11:46 克拉默与矩阵 阅读(1909) 评论(2) 推荐(1) 编辑
摘要:如何得到库 ①先写好一堆的.c文件(.c:我们所需要的各种工具函数) ②将这些.c编译为对应的.o ③将所有的这些.o打包为一个仓库文件(静态库或者动态库) 静态库:按照静态库的方式打包 动态库:按照动态库的方式打包 因为打包的规则不同,所以得到库也是不同的 共性与个性 二者的共性 都是事先做好的. 阅读全文
posted @ 2018-08-03 10:19 克拉默与矩阵 阅读(456) 评论(0) 推荐(0) 编辑
摘要:什么是链接? 链接其实就是连接的意思,将所有相关的东西连接起来。 简单理解静态连接和动态链接: 静态链接:编译时完成链接 动态链接:程序运行起来后,根据需求再去链接,这就是动态链接 静态链接 什么是静态链接 所谓静态链接,其实就是在编译时,调用ld/collect2链接程序,将所有的.o中的机器指令 阅读全文
posted @ 2018-08-03 00:19 克拉默与矩阵 阅读(1130) 评论(0) 推荐(2) 编辑
摘要:分析gcc -v的详细信息的意义 首先我们需要清楚一点,我们并不能完全弄清楚gcc -v的所有信息,因为毕竟我们并不是GCC编译器集合的实现者,对于这些信息,他们才是最清楚的。由于我们不能将所有的信息都搞清楚,所以我们只分析关键信息。虽然我们不能将所有信息都全部弄清楚,但是分析里面的关键信息还是非常 阅读全文
posted @ 2018-08-03 00:17 克拉默与矩阵 阅读(10016) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示