摘要: 写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在时间和空间上的一个权衡。对齐节省了时间。假设一个体系结构的字长为w,那么它同时就假设了在这种体系结构上对宽度为w的数据的处理最频繁也是最重要的。它的设计也是从优先提高对w位数据操作的效率来考虑的。比如说读写时........ 阅读全文
posted @ 2012-02-08 16:23 vivianC 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 二.多进程什么是进程。最直观的就是一个个pid,官方的说法就:进程是程序在计算机上的一次执行活动。说得简单点,下面这段代码执行的时候[cpp]1 int main() 2 { 3 printf(”pid is %d/n”,getpid() ); 4 return 0; 5 6 } 进入main函数,这就是一个进程,进程pid会打印出来,然后运行到return,该函数就退出,然后由于该函数是该进程的唯一的一次执行,所以return后,该进程也会退出。看看多进程。linux下创建子进程的调用是fork();#include <unistd.h> #includ... 阅读全文
posted @ 2012-02-08 16:18 vivianC 阅读(838) 评论(0) 推荐(0) 编辑
摘要: 线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行.进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:简而言之,一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共 阅读全文
posted @ 2012-02-08 15:33 vivianC 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 索引可以是“稠密的”,即数据文件中每个记录在索引文件中都设有一个索引项;索引也可以是“稀疏的”,即数据文件中只有一些记录在索引文件中表示出来,通常为每个数据块在索引文件中设一个索引项。索引还可以是“主索引”或者“辅助索引”。主索引能确定记录在数据文件中的位置,而辅助索引不能。比如说,通常我们会在关系的主键上建立主索引,而在其他的属性上建立辅助索引。3.1.1 顺序文件是对关系中的元组按主键进行排序而生成的文件。关系中的元组按照这个次序分布在多个数据块中。3.1.2 稠密索引如果记录是排好序的,我们就可以在记录上建立稠密索引,它是这样一系列存储块:块中只存放记录的键以及指向记录本身的指针,... 阅读全文
posted @ 2012-02-08 15:21 vivianC 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 首先要明确的一个简单的原则:软件的功能一定要建立在硬件支持的基础之上。可以说,软件实现的功能,是由硬件逻辑堆积封装而来的。那么,一个操作系统,我们知道,它具有很多内核的代码、数据结构。控制着整个计算机系统的运转,例如I/O输出、内存访问等等。现在的多进程操作系统,提供给了用户自己编程的功能,也就是让用户自己编程,自己创建进程。那么,一个问题就来了,一个进程假如需要系统的功能调用怎么办?假如让进程来自己控制那些设备的驱动,那么,难免会有恶意的用户进程来破坏;或者说低水平的程序员控制错误。那么,这部分功能就交给操作系统来进行维护。也就是说,在一个用户进程的运行过程中,它一直是处于用户态的。当需要系 阅读全文
posted @ 2012-02-08 15:13 vivianC 阅读(854) 评论(0) 推荐(0) 编辑