笔试题考点
笔试题考点
1 内存对齐规则(TX):
① 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数。
② 在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
三个数据,一共6种排列:
int
4B
char
1B
short
2B 指针占八字节(64位机器上) 指针占四字节(32位机器上)
根据内存对齐原则:
1.
char
int
short:
char1 + 空3 + int4 + short2 + 空2 = 12
2.
char
short
int:
char1 + 空1 + short2 + int4 = 8
3.
int
short
char:
int4 + short2 + char1 + 空1 = 8
4.
int
char
short:
int4 + char1 + 空1 + short2 = 8
5.
short
int
char:
short2 + 空2 + int4 + char1 + 空3 = 12
6.
short
char
int:
short2 + char1 + 空1 + int4 = 8
- 操作系统的调度逻辑是:发生中断->处理调度->发生中断->处理调度…
一个时间片长度就是两次中断发生之间的间隔。因此,系统开销比率 = 调度耗时/时间片长度
class B
{
float a;
public:
virtual void fun(void);
}
此时sizeof(B)的大小为8,而不是4。因为在类中隐藏了一个指针,该指针指向虚函数表,正因为如此,
使得C++能够支持多态,即在运行时绑定函数的地址。
2)当类中没有任何成员变量,也没有虚函数的时候,
例如:
class B2
{
void fun(void);
}
此时sizeof(B2)的值是多少呢?在C++早期的编译器中,这个值为0;然而当创建这样的对象时,
它们与紧接着它们后面的对象有相同的地址。比如:
B2 b2;
int a;
那么对象b2与变量a有相同的地址,这样的话对对象b2地址的操作就会影响变量a。所以在现在大多数编译器中,该值的大小为1。
如果有虚函数,则sizeof值为类的数据成员的大小加上VTBL(指针,4字节),再加上其基类的数据成员的大小。如果是多重继承,还得加上各基类的VTBL。
假设某分时系统采用时间片轮转法,进程A,B,C,D需要运行的时间分别为20ms,10ms,15ms,5ms,时间片选用5ms,则平均周转时间是:每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。
系统按照时间片轮转,进程运行顺序为A B C D A B C A C A,A执行4次,B执行2次,C执行3次,D执行一次,按执行完的时间算:A在第10个时间片后,B在第6个时间片后,C在第9个时间片后,D在第4个时间片后,平均时间为(10+6+9+4)*5/4 = 36.25 总时间和除以进程数目