摘要: 首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置入栈操作:push eax; 等价于 esp=esp-4,eax->[esp];如下图出栈操作:pop eax; 等价于 [esp]->eax,esp=esp+4;如下图我们来看下面这个C程序在执行过程中,栈的变化情况void func(int m, int n) { int a, b; a = m; b = n;}main() {. 阅读全文
posted @ 2014-03-01 21:26 YEQ 阅读(263) 评论(1) 推荐(0) 编辑
摘要: 1.条件变量和mutex到底有什么区别?都是在没有拿锁的情况下阻塞,拿到锁了解除阻塞。那为什么还要用条件变量呢?2.pthread_cond_broadcast和pthread_cond_signal。既然阻塞的线程被唤醒了之后第一件事就是拿锁,那么即使是broadcast,也会竞争锁,导致只有一个线程能继续,那么signal和broadcast有什么区别吗?3.pthread_cond_wait()前要加一个while循环来判断条件是否为假的原因?1、考虑一个简单的生产者和消费者的模型:由一个intcount标识生产者的生产数量,count由一个mutex上锁避免消费者和生产者同时访问。如果 阅读全文
posted @ 2014-03-01 20:54 YEQ 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 本篇讲解在UML类图中,常见的几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition)。1.泛化关系泛化关系是继承或实现的关系,是is-a关系,具体表现为类与类的继承,接口与接口的继承,类对接口的实现关系。2.依赖关系依赖关系表示为一个类使用另一个类,这种使用关系是具有偶然性的、临时性的、非常弱的,一个类的变化会影响到另一个类,是use a关系,如果类A依赖于类B,那么类B可以是类A的局部变量,或类A方法的参数,或静态方法的调用。3.关联关系关联关系是一种强依赖关系,这种关系不 阅读全文
posted @ 2014-03-01 10:50 YEQ 阅读(317) 评论(0) 推荐(0) 编辑