2012年8月31日

内存数据对齐

摘要: 对程序员来说,内存就是一个很大的Byte数组,通过程序语言我们可以实现以字节(Byte)为单位对内存进行操作(指针),但是对CPU而言内存的读取是以块(chunk)为单位的,不同的数据类型有不同的访问粒度,也就是chunk的大小不同,1B、2B、4B、8B、16B、32B等。所以访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放。不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。数据对齐(Data Alignment)这个要求可以提高存储器系统的性能,减少寻址次数,代价是浪费了一些空间。换句话说是用相对廉价 阅读全文

posted @ 2012-08-31 18:59 yfan.qiu 阅读(227) 评论(0) 推荐(0) 编辑

2012年8月29日

C/C++运算符优先级

摘要: 第一梯队 .-> () [] 第二梯队 * & ++ -- ! ~ 右结合第三梯队 算术运算 << >>第四梯队 <= < >= > == !=第五梯队 位操作 逻辑操作 条件操作第六梯队 赋值 右结合 逗号 (a,b,c)返回最右边的操作数的值c 阅读全文

posted @ 2012-08-29 09:52 yfan.qiu 阅读(206) 评论(0) 推荐(0) 编辑

2012年6月11日

linux硬链接与软链接

摘要: Linux 系统中有软链接和硬链接两种特殊的“文件”。软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。硬链接则透过文件系统的inode来产生新档名,而不是产生新档案。创建方法都很简单:软链接(符号链接) ln -s source target硬链接 (实体链接)ln source targetinode要解释清楚两者的区别和联系需要先说清楚 linux 文件系统中的 inode 这个东西。当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode区和data block(实际数据放置在数据区域中)这个inode即是(目录、档案)文件在一个文件系统... 阅读全文

posted @ 2012-06-11 21:32 yfan.qiu 阅读(16553) 评论(0) 推荐(1) 编辑

2012年6月4日

静态库 共享库 静态链接 动态链接

摘要: 库,是一种封装机制,简单说是把所有的源代码编译成目标代码后打成的包.库的开发者除了提供库的目标代码外,还提供一系列的头文件,头文件中就包含了库的接口,库分为静态库(static library)和共享库(share library)。在Linux中静态库以一种存档(archive)的特殊文件格式存放在磁盘中,由后缀.a标识;共享库通常用.so后缀来表示。win下分别是.lib和.dllLinux ld程序这样的静态连接器以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的可以加载和运行的可执行目标文件作为输出。静态链接的时候,载入代码就会把程序会用到的动态代码或动态代码的地址确定下来 阅读全文

posted @ 2012-06-04 23:10 yfan.qiu 阅读(2654) 评论(0) 推荐(1) 编辑

2012年5月15日

关于递归思想

摘要: 能够将一个大问题转化成若干个类似的小问题(用相同方法能够解决的类似的更小规模的问题),并且小问题有一个截止边界即存在一个最小问题需要考虑的边界(关于如何截止):最大规模问题(问题本身)如何通过若干个次规模问题的结果来解决?最小规模问题(截止条件)是否对边界条件有微妙的影响? 阅读全文

posted @ 2012-05-15 23:02 yfan.qiu 阅读(112) 评论(0) 推荐(0) 编辑

2012年5月14日

最大子序列和问题

摘要: 一串数据,可能有负数,求和最大的子序列,如果所有数据为负,返回0O(N^2) 1 // 暴力求解 2 3 int maxsubseq(const int* a, int n) 4 { 5 int maxsum = 0; 6 for(int i = 0; i < n; i++) 7 { 8 int tmpsum = 0; 9 for(int j = i; j < n; j++)10 {11 int tmpsum += a[j];12 if(tmpsum > maxsum)13 ... 阅读全文

posted @ 2012-05-14 21:31 yfan.qiu 阅读(151) 评论(0) 推荐(0) 编辑

2012年5月12日

win与linux的文件格式转换

摘要: 回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return换行 \n 本义是光标往下一行(不一定到下一行行首),n的英文newline,控制字符可以写成LF,即Line FeedUnix系统里,每行结尾只有“<LF>”,即"\n"Windows系统里面,每行结尾是“<CR><LF>”,即“\r\n”Mac系统里,每行结尾是“<CR>”,即"\r"有时可能需要将某些 UNIX 文本移至 Windows 系统,该脚本将为您执行必需的格式转换。 $ sed 阅读全文

posted @ 2012-05-12 12:03 yfan.qiu 阅读(1810) 评论(0) 推荐(0) 编辑

2012年5月10日

Linux shell基本运算

摘要: shell程序中的操作默认都是字符串操作,在要运行数学运算符的时候可能得到意想不到的答案:var=1var=$var+1echo $varoutput:1+1从这个例子中可以看出shell字符串连接的操作,需要注意的是空格。在shell中可以使用let来指示下面是算术表达式,let表达式内变量不用加$var=1let "var+=1" 或 let var+=1 这种写法运算符间不能有空格 echo $varoutput:2这其中的let可以用(())代替,let ″j=i*6+2″等价于((j=i*6+2)),就像很多的循环中用法一样注意:let必须是完整的算术表达式,即有 阅读全文

posted @ 2012-05-10 11:34 yfan.qiu 阅读(30341) 评论(0) 推荐(1) 编辑

2012年5月8日

内存动态分配与释放

摘要: 1.C语言的函数malloc和free(1)函数malloc和free在头文件<stdlib.h>中的原型及参数 void * malloc(size_t size)动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。 void free(void *ptr)释放动态申请的内存空间,调用free()后ptr所指向的内存空间被收回,如果ptr指向未知地方或者指向的空间已被收回,则会发生不可预知的错误,如果ptr为NULL,free不会有任何作用。(2) C语言中典型用法 T为任意数据类型 T *p = ( T * )malloc( sizeof(T) * 阅读全文

posted @ 2012-05-08 17:19 yfan.qiu 阅读(11510) 评论(0) 推荐(3) 编辑

关于C++复制构造函数

摘要: 复制构造函数(copy constructor):单个对本类类型引用形参(常用const修饰)。当定义一个新对象并用同一个类型的对象对它进行初始化式,将显式使用复制构造函数,当该类型的对象传递给函数或从函数返回该类类型的对象时,将隐式调用复制构造函数。复制构造函数的形参可以不为const,但必须是一个引用。否则每当以pass-by-value传递参数时,调用一个复制构造函数都会导致无穷递归。如果不定义复制构造函数,编译器将合成一个,因此若要完全禁止复制(iostream类就不允许复制),禁止用户复制该类类型而且连友元和成员函数都不能进行复制:在private中声明但不定义一个复制构造函数。用户 阅读全文

posted @ 2012-05-08 12:59 yfan.qiu 阅读(1326) 评论(0) 推荐(1) 编辑

导航