摘要:
壹:在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该再透明了。一、内存对齐的原因大部分的参考资料都是如是说的:1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于, 阅读全文
摘要:
GCC 选项GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数 Linux 命令一样你不能在一个单独的连字符后跟一组选项. 例如, 下面的两个命令是不同的:gcc -p -g test.cgcc -pg test.c第一条命令告诉 GCC 编译 test.c 时为 prof 命令建立剖析(profile)信息并且把调试信息加入到可执行的文件里. 第二条命令只告诉 GCC 为 gprof 命令建立剖析信息.当你不用任何选项编译一个程序时, 阅读全文
摘要:
查看源程序一、显示源代码GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。不然就看不到源程序了。当程序停下来以后, GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。还是来看一看查看源代码的GDB命令吧。list <linenum>显示程序第linenum行的周围的源程序。list <function>显示函数名为function的函数的源程序。list显示当前行后面的源程序。list -显示当前行前面的源程序。一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是 阅读全文
摘要:
队列是一种先进先出的数据存储结构,一般操作系统中用的比较多,本文主要介绍对顺序队列的入队列,出队列,遍历队列操作。 定义顺序队列: 我们可以用一个数组来表示一个顺序存储结构,两个整数来分别指向数组的下标,表示队列的头指针和尾指针;typedef struct queue{ int data[MAX]; int front; //头指针 int rear; //尾指针}queue; 定义队列之后首先就是初始化队列: 初始化队列的时候队列一定是空的,队列的头指针和尾指针必须指向数组的首端;queue *init(){ queue *h; ... 阅读全文
摘要:
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int menu() //选择菜单 5 { 6 int result; 7 printf("**********请选择:***********\n"); 8 printf("**********1.插入:***********\n"); 9 printf("**********2.删除:***********\n");10 printf("**********3.遍历:***********\n");1 阅读全文
摘要:
矩阵是线性代数中的一个知识,刚开始学习的时候可能感觉不到它有什么用处,最初的感觉就是对二维数据的操作。其实现实生活中矩阵的用处太大了,设计领域相当的广泛。在此只讨论稀疏矩阵的转置问题; 可能看到矩阵就会想到二维数组,比如这样一个矩阵: 你可能会想到用二维数组来存放此矩阵中的元素,就像这样:int text[][5] = {{0,5,6,0,4},{0,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{0,2,0,0,1}};这样好像也没有什么不好。我们再来看看这个矩阵,五行五列,可以包含二十五个元素,但是此矩阵只有七个元素。但是我们在存放数据的时候分配了二十五块int... 阅读全文
摘要:
switch语句中的default位置可以随意放,一开始我想不通,就看了下简单反汇编的,发现原来只是靠default的标记,程序执行时先测试表达式是否满足某个case,若都不满足就跳到default去执行。本人目前还没进军反汇编界,请大牛不要取笑。 下面以两个简单的例子说明:1)main(){int a = 0;int o = 0;a = 4;switch(a){case 1:o = 10;printf("%d\n",o);case 2:o = 20;printf("%d\n",o);default:o = 100;printf("%d\n&q 阅读全文
摘要:
编译器将程序分解成符号的方法是,从左到右一个字符一个字符的读入,如果该字符可能组成一个字符,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。a---b这个表达式你要怎么解释?a-- - b?还是a- --b?这个要根据编译器的词法分析器来确定了;写个程序如下:1 #include <stdio.h>2 void text(int a)3 {4 int a=10;5 int b=1;6 printf("%d\t a:%d\n" 阅读全文
摘要:
1.sort(分类)用法sort命令选项很长,下面仅介绍各种选项。sort命令的一般格式为:sort -cmu -o output_file [other options] +pos1 +pos2 input_files下面简要介绍一下sort的参数:-c 测试文件是否已经分类。-m 合并两个分类文件。-u 删除所有复制行。-o 存储s o r t结果的输出文件名。其他选项有:-b 使用域进行分类时,忽略第一个空格。-n 指定分类是域上的数字分类。-t 域分隔符;用非空格或t a b键分隔域。-r 对分类次序或比较求逆。+n n为域号。使用此域号开始分类。-nn为域号。使用此域号结束分类,一般 阅读全文