- 博客(23)
- 资源 (1)
- 收藏
- 关注
原创 C++概述1
C++由C语言发展而来,增加了面向对象的机制,并且与C语言兼容,用C语言编写的程序可以不加修改用于C++.面向对象程序设计,是针对开发较大规模的程序而提出来的,目的是提高软件开发的效率(不是执行效率)1 C++引入命名空间 Namespace,为了避免命名冲突指定所使用的变量时需使用::操作符,::操作符是域解析操作符除了直接使用域解析操作符,还可以使用using声明,using声
2017-11-06 15:14:34
256
原创 C++的学习(战略篇)
读王垠《如何掌握所有的程序语言》笔记1 重视语言特性,而不是语言语言都有通用的特性,掌握一种语言,用清晰简单的思维模型写出好的代码。开始用一种新的程序语言,并不需要先去看大部头手册或者书籍,而是先有一个需要解决的问题。然后浏览下语言的手册,接着拿起一段代码来修改,把代码改成自己想要的样子。在这个过程中,他很快掌握这个语言。随着需求出现,可能的问题这个语言“变量定义”是什么语法,需要
2017-11-03 15:26:01
216
原创 Kernel BitMap 使用小例子
/*BitMapTest.c*/#include #include #define BIT_CNT 65static int __init test_init(void){ long unsigned int * my_bitmap; int arr_size = (BIT_CNT - 1) / 64 + 1; int i; printk("init %d bit, %d
2017-08-15 22:06:33
438
原创 大端小端测试代码
#include #include union { int number; char s;}test;bool testBigEndin(){ test.number = 0x01000002; return (test.s == 0x01);} int main(){ if (testBigEndin()) printf("big"); else pri
2017-08-15 20:29:38
810
原创 如何使用linux下载到正确的安装包1(软件源更新)
昨天实验室新来的学妹说ubuntu安装某Hadoop测试工具老是提示出错,缺这少那。这种问题我以前也经常遇到,网上找到的安装包和Linux版本不兼容。不过后来装的多了,慢慢有了经验。 已经使用apt-get install / yum (whatever类似的命令) 之后,显示没有可以更新的资源包,但是别处用到改资源还是提示版本不够?那就是时候更新软件源了。所谓软件源,我理解是下载
2017-07-22 09:26:49
7014
原创 raid5_cache.c数据结构之r5l_io_unit
结构体代码struct r5l_log { struct md_rdev *rdev; u32 uuid_checksum; sector_t device_size; /* log device size, round to * BLOCK_SECTORS */ sector_t max_free_space; /* reclaim run if free spac
2017-06-08 19:03:04
405
原创 list.h
1 list_for_each_entry(pos, head, member)函数功能:遍历链表,查找指定类型参数定义:pos-循环游标;head-链表头节点;member-头节点在结构体中的名称返回结果:/** * list_for_each_entry - iterate over list of given type * @pos: the type * to use
2017-06-08 16:03:44
225
原创 raid5_cache.c数据结构之r5l_io_unit
1 r5l_io_unit/* * an IO range starts from a meta data block and end at the next meta data * block. The io unit's the meta data block tracks data/parity followed it. io * unit is written to log di
2017-06-08 10:40:08
511
原创 bio.c
1 bio_add_page函数功能:把page加入bio的bio_vec链表参数:bio-目标bio;page-待加入的page;len-加入长度;offset-在页中偏移地址; 注意到bio->bi_vec的结构,后三个参数用来给bio->bi_vec赋值/*include/linux/blk_types.h*/struct bio_vec {
2017-06-08 10:11:16
1201
原创 kmap_atomic/kunmap_atomic
/* *drivers/md/raid5-cache.c *r5l_write_stripe */ for (i = 0; i disks; i++) { void *addr; if (!test_bit(R5_Wantwrite, &sh->dev[i].flags)) continue; write_disks++; /* checksum is alread
2017-06-01 19:12:39
1091
原创 void*
指针有两个属性:指向变量/对象的地址和长度——指针存储地址,指针类型决定长度,编译器根据指针类型从指针指向的地址向后寻址,比如int* 从地址向后寻找4字节,double*从指针向后寻找8字节。void*是一种特别的指针,表示它没有类型/类型不能判断出指向对象的长度;任何指针都能赋值给void*,但只能获得变量/对象的地址,不知道大小;void*赋值给其他类型指针时,要指明转换类型,即说明存储
2017-06-01 18:57:58
509
原创 extern 变量/函数
一 extern作用声明函数或者全局变量的作用范围,其声明的函数和变量可以在本模块和其他模块使用(注意是声明不是定义)。例如,模块B(编译单元)引用模块A定义的全局变量或函数,只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数值或变量,但它会在连接是从模块A生成的目标代码中找到此函数。二 例子/*main.c*/#include #include "main.h"
2017-05-29 17:19:17
370
原创 VMware-tools安装
环境搭建 federa 14 + linux 2.6.35.6安装VMware-tools按照:http://pubs.vmware.com/workstation-12/index.jsp?lang=en_US&topic=/com.vmware.ws.using.doc/GUID-08BB9465-D40A-4E16-9E15-8C016CC8166F.html出错1bas
2017-04-26 22:07:49
668
原创 驱动开发-1 模块hello world
本文介绍在内核编译模块、加载和卸载模块的过程。 首先开发环境是Linux-4.4.0+两份代码,hello.c+Makefile。 这两份代码放到哪里呢?答案是哪里都可以,不过要注意放在一个文件夹下。这个文件夹的位置就是Makefile中的CURRENT_PATH,编译终端在这个文件夹打开就行。hello.c/*编写一个helloworld向内核输出*/
2017-04-25 14:29:06
246
原创 SSD+RAID优点以及存在问题
研究生期间研究在离硬件很近的软件层做优化,不管是SSD还是新研究的PCM存储,都是基于“软件提升提供丰富的服务,硬件改变却是革命性的颠覆”的大基础,当有独特特点的、更高性能的硬件出现后,上层的软件也必须随之改变,充分发挥其性能,而不是成为整个系统的瓶颈。 SSD因为更快的速写速度而逐渐取代磁盘,但SSD也有固有缺陷,比如1 bit error,因为对存储系统容错性要求高;2 擦
2017-04-17 11:31:02
20589
原创 数据结构-二叉树(递归前序、中序、后序遍历;栈实现中序变量;二叉树镜像)
* *前序、后序、中序变量二叉树(递归解法) *中序 栈实现 *深度遍历 队列实现 *应用:二叉树镜像(剑指offer) */ typedef struct BiTNode *BiTree;//结点指针 //前序遍历 void preOrderTraverse(BiTree T) { if(NULL == T) return; printf("%c", T-
2017-04-15 11:17:17
631
原创 C++ Primier学习笔记2-虚函数
虚函数 多态(继承关系的多个类型)通过虚函数实现。 关键字virtual告诉编译器不应当完成早绑定,而是自动实现晚绑定/运行时绑定所必须的所有机制。动态绑定只有当通过指针或者引用调用虚函数时才会发生。 补充:析构函数可以是虚函数,所有的派生类的析构函数都将自动变为virtual型,不会出现由于析构函数未被调用而导致的内存泄漏(虚
2017-04-14 14:37:58
367
原创 c++ Primer学习笔记1-前言
C++语言可以看做三部分组成:低级语言,大部分继承自C;现代高级语言特性,定义自己的类型+组成大规模程序和系统;标准库,利用高级特性提供有用的数据结构和算法。
2017-04-13 09:17:31
223
原创 double计算
在《剑指offer》里看到两个double不能直接使用 == 符号判断大小,有的资料也说double不能使用++。所以接下来这道单选题改怎么办呢? 在c语言中,要求运算必须是整型的运算符是:/++!=% 不妨写个简单的程序测试一下,#include int main(){ double a,b; a =
2017-03-29 17:12:21
942
转载 C语言基础-函数调用栈
程序的执行流程,实际是连续的函数调用。函数调用通常使用堆栈实现,每个用户进程对应一个调用栈(call stack)结构。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。1 寄存器寄存器用于存放程序执行中用到的数据和指令
2017-03-01 23:15:32
689
原创 Linux md raid5 - mdadm创建软RAID5(模拟出错和出错恢复)
最近按教程创建了RAID5,遇到一点小问题,希望记录下来,能对大家有点帮助。 实验环境 Ubuntu 16.04.1 + VMware Workstation 12 Player 实验目的 使用mdadm创建软raid5,模拟故障测试,了解raid5是怎样工作的。 首先配置好基础的环境,在虚拟机中添加四
2017-02-28 17:16:59
11560
原创 C语言基础-局部变量和全局变量的区别
局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量,在函数体内引用变量会用到同名的局部变量而不是全局变量。 具体来说,全局变量和局部变量的区别有:1 作用域:全局变量的作用域为整个程序,局部变量则是当前函数或循环;2 内存存储方式:全局变量存储在全局数据区,局部变量存储在栈区;3 生命期:全局变量的生命期和主程序一样,随程序的销毁而销毁;局部变量在函数内部或循环内
2017-02-26 12:53:23
787
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人