09 2018 档案

摘要:在软件编译过程中,经常会碰到类似这样的编译错误: /usr/bin/ld: cannot find -lhdf5 这表示找不到库文件 libhdf5.so,若是其它库文件,则是 cannot find -lxxx 了,其中 xxx 是库文件的名字。 解决方法有: 1. 安装此库文件和相关软件 一般库 阅读全文
posted @ 2018-09-29 18:23 小时候挺菜 阅读(2425) 评论(0) 推荐(0)
摘要:1、 GNU 上关于LIBRARY_PATH的说明: 2、 man7 上关于LD_LIBRARY_PATH的说明: 3、 StackOverflow 上关于 LIBRARY_PATH 和 LD_LIBRARY_PATH 的解释: 总结 1.Linux gcc编译链接时的动态库搜索路径 GCC编译、链 阅读全文
posted @ 2018-09-29 18:14 小时候挺菜 阅读(1383) 评论(0) 推荐(1)
摘要:一、引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又 阅读全文
posted @ 2018-09-29 17:08 小时候挺菜 阅读(3712) 评论(0) 推荐(1)
摘要:最近想要实现对xml的解析,上网看到有很多库可以直接调用,例如minixml,tinyxml等,我选择了minixml(没有原因,纯属是因为这个找到了中文文档- -) 附上中文文档链接:https://blog.csdn.net/shenwansangz/article/details/473587 阅读全文
posted @ 2018-09-29 16:38 小时候挺菜 阅读(901) 评论(0) 推荐(0)
摘要:main函数中的第一个参数argc代表的是向main函数传递的参数个数,第二个参数argv数组代表执行的程序名称和执行程序时输入的参数 这里注意argc的大小比实际输入的参数大1,因为argv[0]保存的是程序的运行目录和程序名 测试结果:文件名为argv 阅读全文
posted @ 2018-09-29 16:21 小时候挺菜 阅读(952) 评论(0) 推荐(0)
摘要:1.结构体数组中对属性的初始化可以用“.feature”的形式来初始化 2.一个结构体元素中属性间用逗号“,” 阅读全文
posted @ 2018-09-25 19:40 小时候挺菜 阅读(1825) 评论(0) 推荐(0)
摘要:一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和 阅读全文
posted @ 2018-09-25 14:49 小时候挺菜 阅读(2142) 评论(0) 推荐(0)
摘要:动态链接库、静态库、import库区别 动态链接库(Dynamic Linked Library): Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动态链接库中。其中有3个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll,它 阅读全文
posted @ 2018-09-25 09:36 小时候挺菜 阅读(710) 评论(0) 推荐(0)
摘要:编写运行的快的程序有三个因素:①选择合适的算法和数据结构;②理解编译器的能力,使用有效的方式让编译器能进行优化;③对于运算量特别大的程序,可能还需要进行任务分解。在这一过程中可能还需要对程序的可读性和运行速度进行权衡。 在阅读这一章节的过程中花费了大量的时间对我自己的自动办公软件进行了优化,算是学以 阅读全文
posted @ 2018-09-13 19:15 小时候挺菜 阅读(1717) 评论(0) 推荐(0)
摘要:文件格式 (1)BIN文件:binary文件,即二进制文件。Bin目录用来保存项目生成后程序集,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。 (2)HEX文件: 阅读全文
posted @ 2018-09-13 17:05 小时候挺菜 阅读(1605) 评论(0) 推荐(0)
摘要:在C语言中只能通过malloc()和其派生的函数进行动态的申请内存,而实现的根本是通过系统调用实现的(在linux下是通过sbrk()系统调用实现)。 malloc()到底从哪里得到了内存空间?答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链 阅读全文
posted @ 2018-09-12 16:00 小时候挺菜 阅读(42563) 评论(4) 推荐(7)
摘要:一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序。 现在64位的系统(这里主要指x86_64系统,包括AMD64和Intel的EM64T)已经开始广泛的使用起来了,甚至于你现在要是想买32位的处理器根本就没有。64位的系统在性能和 阅读全文
posted @ 2018-09-12 15:07 小时候挺菜 阅读(12382) 评论(1) 推荐(2)
摘要:数组简介 如果各位猿友是一路跟着LZ看到这里的,那么数组的定义就非常简单了,它就是一个相同数据类型的数据集合。数组存储在一系列逻辑上连续的内存块当中,之所以说是逻辑上连续,是因为整个内存或者说存储器本身就是逻辑上连续的一个大内存数组。如果我们用Java语言的类型来表示我们的存储器的话,可以看做是by 阅读全文
posted @ 2018-09-11 20:01 小时候挺菜 阅读(6008) 评论(0) 推荐(1)
摘要:栈帧的结构 倘若我们要想搞清楚过程的实现,就必须先知道栈帧的结构是如何构成的。栈帧其实可以认为是程序栈的一段,而程序栈又是存储器的一段,因此栈帧说到底还是存储器的一段。那么既然是一段,肯定有两个端点,这个不需要LZ再普及了吧。 这两个端点其实就是两个地址,一个标识着起始地址,一个标识着结束地址,而这 阅读全文
posted @ 2018-09-11 20:00 小时候挺菜 阅读(6790) 评论(1) 推荐(3)
摘要:条件码寄存器 这个子标题在之前就提到过,条件码寄存器与普通的寄存器不同,它们都是1位寄存器,换句话说,它们当中的值只有0和1。当有算术与逻辑操作发生时,这些条件码寄存器当中的值会相应的发生变化,这算是比较神奇的地方吧。 书中列出了四种常用的寄存器,它们的名字与作用分别如下所述,以下是LZ的理解。 C 阅读全文
posted @ 2018-09-11 19:58 小时候挺菜 阅读(949) 评论(0) 推荐(1)
摘要:我们先来看看这些指令的大致介绍,如果各位看过上一章的话,会发现这里的指令有的会有些眼熟,但是它们的作用却截然不同。以下是书中的一张概图。 第一个指令有些眼熟吧,它就是我们上一章当中的imul乘法指令的双字形式。不过可以看出,这里的imull指令已经完全变了味道,它将结果存入两个寄存器。接下来,我们来 阅读全文
posted @ 2018-09-11 09:14 小时候挺菜 阅读(394) 评论(0) 推荐(0)
摘要:eal指令是非常神奇的一个指令,它可以取一个存储器操作数的地址,并且将其赋给目的操作数。如果用C语言当中来对应的话,它就相当于&运算。 比如对于leal 4(%edx,%edx,4),%eax这条指令来讲,我们假设%edx寄存器的值为x的话,那么这条指令的作用就是将 4 + x + 4x = 5x 阅读全文
posted @ 2018-09-10 15:53 小时候挺菜 阅读(1285) 评论(0) 推荐(0)
摘要:mov指令 mov指令的作用是将源操作数S中的数据复制到目的操作数D中,mov指令有一个数据格式和两个操作数,因此一般的形式为[movx S D]。其中x为数据格式,S为源操作数,D为目的操作数。 这里举一个简单的例子,比如我们有一条指令为movl %edx %eax。那么它的执行过程就如下图所示。 阅读全文
posted @ 2018-09-10 15:32 小时候挺菜 阅读(608) 评论(0) 推荐(0)
摘要:无符号数加法 对满足0 =< x, y<2w的x和y有: 例如:无符号数65535 + 1 为10000000000000000,由于超过16位,所以截断后0~15位都是0,因此结果为0 结果为0 补码加法运算 补码加法运算就是先按照无符号加法进行运算,而后在进行无符号和有符号的转换 对满足 -2w 阅读全文
posted @ 2018-09-10 11:17 小时候挺菜 阅读(573) 评论(0) 推荐(0)
摘要:扩展 无符号数扩展:将一个无符号数转换为一个更大的数据类型,我们只需要简单的在二进制序列前面添加 0 即可 有符号数的扩展:将其补码数字转换为一个更大的数据类型,我们需要在开头添加符号位,即在前面补符号位 如果我们原始位为[xw-1 , xw-2 , … , x2 , x1 , x0],那么扩展k位 阅读全文
posted @ 2018-09-10 10:52 小时候挺菜 阅读(354) 评论(0) 推荐(0)
摘要:有符号数转换为无符号数 比较两个等式: (1) (2) 我们计算(1)-(2) = xw-12w (3) 我们可以得到 :B2U = xw-12w + B2T 将x用T2B替代,则:B2U(T2B)= T2U = x + xw-12w 位xw-1决定了x是否为负 据此 我们可以得到公式: 相应的转换 阅读全文
posted @ 2018-09-10 10:37 小时候挺菜 阅读(6872) 评论(0) 推荐(0)
摘要:无符号数的编码 假设有一个w位的无符号整数,我们可以将位向量写成[xw-1 , xw-2 , … , x2 , x1 , x0]。其中每个xi都取值为0或1,我们用一个函数B2Uw(Binary to unsigned,长度为w)来表示: 函数B2U将一个长度为w的0、1串映射到非负整数: 对于一个 阅读全文
posted @ 2018-09-10 10:02 小时候挺菜 阅读(639) 评论(0) 推荐(0)
摘要:经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器。特别是在代码经过编译器一些比较复杂的优化后,会变得“难以辨认”,使用调试器也变得有些头疼。先举个简单的例子: 如果采用gcc(笔者的版本是4.7.3)编译,使 阅读全文
posted @ 2018-09-05 11:49 小时候挺菜 阅读(1456) 评论(0) 推荐(0)
摘要:文章转自 循环冗余校验(CRC)算法入门引导 - Ivan 的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/liyuanbhu/article/details/7882789 一、原理部分 CRC 算法的基本思想是将传输的数据当做一个位数很长的数,将这个数除以另 阅读全文
posted @ 2018-09-03 19:55 小时候挺菜 阅读(32930) 评论(0) 推荐(0)