
C语言
zhouzhanglong
这个作者很懒,什么都没留下…
展开
-
浅谈C中的malloc和free(3)
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是转载 2009-04-17 09:35:00 · 511 阅读 · 0 评论 -
用户模式 VS 内核模式(1)
<br />用户模式:<br /> 通过windows启动的任何一个进程都在用户模式(user mode)下运行,在这种模式下的进程不能访问其它进程的资源,除非通过API调用。在这种模式下运行的程序不能处理中断(interrupts)和环境切换(context switching)。<br />中断(interrupts):<br /> CPU在运行时经常被一些事件打断(interrupt),如计时器,键盘,硬盘等。这些事件就叫做中断(interrupts)。操作系统内核必须创建一些中断处理器(interr原创 2010-11-17 19:56:00 · 740 阅读 · 0 评论 -
用户模式与内核模式(2)
<br />用户模式与内核模式<br />从Intel80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运行于ring0~ring3从高到低四个不同的权限级,对数据也提供相应的四个保护级别。运行于较低级别的代码不能随意调用高级别的代码和访问较高级别的数据,而且也只有运行在ring0层的代码可以直接对物理硬件进行访问。由于WindowsNT是一个支持多平台的操作系统,为了与其他平台兼容,它只利用了CPU的两个运行级别。一个被称为内核模式,对应80x86的ring0层,是操作系统的核心部分,设备驱动程原创 2010-11-17 19:58:00 · 531 阅读 · 0 评论 -
编译器和解释器的区别
<br />编译器和解释器都是可执行程序. 二者都需要输入.即文本代码文件. 编译器这样处理代码: 对代码进行词法分析,语法分析,语义制导,生成中间代码,中间代码优化,生成目标代码,目标代码优化.(目标代码可以是汇编代码,也可以是机器代码,这取决于编译器的实现,比如编译器中集成了汇编器) 代码的优化是反复进行的,穿插于整个过程中. 整个代码文件被编译成目标代码之后, 链接器程序将目标文件与相应的函数库链接,这样 原来的文本代码就成为了一个可执行程序,可以独立运行. 而解释器是这样处理: 解释器同样要对代码进转载 2010-11-16 21:22:00 · 2913 阅读 · 0 评论 -
int main(int argc,char* argv[])详解
<br />argc是命令行总的参数个数 <br />argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 <br />命令行后面跟的用户输入的参数,比如: <br />int main(int argc, char* argv[]) <br />{ <br />int i; <br />for (i = 0; i<argc; i++) <br />cout<<argv[i]<<endl; <br />cin>>i;原创 2010-11-07 18:27:00 · 565 阅读 · 0 评论 -
malloc和free的原理
malloc和free的原理 <br /> <br />一、malloc()和free()的基本概念以及基本用法: <br /><br />1、函数原型及说明: <br /><br />void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 <br /><br />关于分配失败的原因,应该有多种,比如说空间不足就是一种。 <br /><br />void free(void *FirstByte):原创 2010-09-27 16:20:00 · 533 阅读 · 0 评论 -
01背包问题求解(经典DP)(转)
转载自http://www.concretevitamin.com.cn/informatics/Pack/P01.html写的很简练精辟。题目<br />有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路<br />这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。<br />用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:<br />f[i][v]=转载 2010-08-25 15:58:00 · 1025 阅读 · 0 评论 -
递归算法分析-分享
1. 深入认识递归 (1) 递归执行过程 例子:求N!。 这是一个简单的"累乘"问题,用递归算法也能解决。 n! = n * (n - 1)! n > 1 0! = 1, 1! = 1 n = 0,1 因此,递归算法如下: Java代码 fact(int n) { if(n == 0 || n == 1) return 1; else原创 2010-08-16 13:25:00 · 968 阅读 · 2 评论 -
时间复杂度
<br />1 仅仅依赖于问题规模的时间复杂度<br /><br />(1) 例1: 交换i和j的内容 <br /> Java代码 t = i; i = j; j = t; t = i; i = j; j = t;<br /><br /> 以上三条语句的频度均为1,该算法段的执行时间是一个与问题规模n无关的常数。 <br />因此,算法的的时间复杂度为常数阶,记作T(n)=O(1)。 <br /><br /> 算法的时间复杂度是O(1)。 <br原创 2010-08-16 13:14:00 · 1343 阅读 · 0 评论 -
浅谈C中的malloc和free
在 C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以 写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!原创 2009-04-17 09:21:00 · 421 阅读 · 0 评论 -
void及void指针类型
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序转载 2009-04-17 09:55:00 · 438 阅读 · 0 评论 -
内存分配方式
<br />内存分配方式有三种:<br /><br />(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。<br /><br />(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。<br /><br />(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用原创 2010-11-19 21:10:00 · 435 阅读 · 0 评论