
操作系统
文章平均质量分 82
Supermanlyy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux C语言 内存越界问题总结
内存越界问题是项目开发中比较难解决的问题,下面就简单的描述下内存越界的种类、现象及引起的原因。 首先要明白进程地址空间的分配如下图: 如果进程是多线程的,则每个线程都会在用户的栈区开辟一个自己的栈。 了解的上述分布图,知道每个变量、每块内存在系统中的布局,很容易区分一个 地址是否为有效地址,一个变量或者内存的数据被破坏了可以大致判断出是那个变量或者内存使用越界了。转载 2012-12-10 17:55:46 · 5800 阅读 · 0 评论 -
内存越界的概念和调试方法
调试了两天,搞定了项目里一个内存越界的bug,于是记录一下,备查。所谓内存越界(Heap Corruption),就是指当内存输入超出了预分配的空间大小,就会覆盖该空间之后的一段存储区域,导致系统异常。越界访问是非常常见的一种黑客手段。内存越界通常有如下的表现:1 程序出现异常 异常的现象有很多,如:代码突然跑到不相干的地方去执行,访问异常,正常的变量操作也报错…转载 2012-12-10 15:36:14 · 2764 阅读 · 0 评论 -
如何用栈实现递归与非递归的转换
一.为什么要学习递归与非递归的转换的实现方法? 1)并不是每一门语言都支持递归的. 2)有助于理解递归的本质. 3)有助于理解栈,树等数据结构.二.递归与非递归转换的原理. 递归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来.需要说明的是,这个"原理"并没有经过严格的数学证明,只是我的一个猜想,不过在至少在我遇到的例子中是适用的.转载 2012-12-07 19:27:59 · 1018 阅读 · 1 评论 -
arm堆栈的增长方式
堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Sta转载 2012-12-07 19:18:30 · 1295 阅读 · 1 评论 -
获得堆栈增长方向的一种方法
在阅读wget源代码的过程中,发现一个用C语言实现,获得堆栈增长方向的巧妙方法 wget版本为1.11.4 函数位置: $ pwd/home/c-aries/source/wget-1.11.4/src$ grep -n "^find_stack_direction" alloca.c 119:find_stack_direction ()$实现代码转载 2012-12-07 17:39:19 · 642 阅读 · 0 评论 -
堆与栈
堆(heap)和栈(stack)有什么区别?? 简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放转载 2012-12-07 17:21:19 · 479 阅读 · 0 评论 -
如何判断栈的增长方向?
对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的问题,因为栈就是从高地址向低地址增长。不过,显然这不是这个问题的目的,既然把这个问题拿出来,问的就不只是i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。在一个物质极大丰富的年代,除非无路可退,否则我们坚决不会使用汇编去解决问题,而对于这种有系统编程味道的问题,C是一个不错的选择。那接下来的问题就是如何用C去解决这个问题转载 2012-12-07 17:18:27 · 521 阅读 · 0 评论 -
生产者消费者完整代码
#include #include #include using namespace std;#define SIZE_OF_BUFFER 10 //缓冲区长度unsigned short ProductID = 0; //产品号unsigned short ConsumeID = 0; //将被消耗的产品号unsigned short index_in = 0; /转载 2013-01-11 15:53:00 · 767 阅读 · 0 评论