![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++ 语言
AuroraX
这个作者很懒,什么都没留下…
展开
-
宏的一些副作用
1、优先级问题 1) 传入变量优先级 #define MULTI(a,b) a * b MULTI(1+2,3) => 1 + 2 * 3 其实是想要(1 + 2) * 3 2) 作为值返回时,类似1) #define ADD(a,b) (a) + (b) int c = ADD(a,b) * 3; => (a) + (b) * 3 其实是想要(a + b) * 3 所以,一般的规则是:宏里面参数全部用括号括起来;如果作为值返回,整个表达式也用括号括起来 。 所以,上面最好这么写:转载 2011-02-16 16:47:00 · 567 阅读 · 0 评论 -
堆和栈的区别(转过无数次的文章)
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的转载 2011-03-25 05:29:00 · 552 阅读 · 0 评论 -
关于计算机系统的死锁
<br />计算机系统产生死锁的根本原因是资源有限且操作不当。 一种原因是系统提供的资源太少了,远不能满足并发进程对资源的需求。这种竞争资源引起的死锁是我们要讨论的核心。另一种原因是由于进程推进顺序的不合适引发的死锁。 产生死锁的四个必要条件: 1、互斥条件:在一段时间内,一个资源只能由一个进程独占使用,若别的进程也要求该资源,则须等待直至其占用者释放; 2.不可抢占条件:进程所获得的资源在未使用完毕之前,资源申请者不能强行从资源占有者手中夺取资源,而只能有该资源的占有者自行释放;<b转载 2011-04-18 08:34:00 · 1802 阅读 · 0 评论