2012年3月26日

栈,堆,全局,文字常量,代码区

摘要: 一. 区域划分堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。每个C ++对象的数据成员也存在在栈中,每个函数都有自己的栈,栈被用来在函数之间传递参数。操作系统在切换线程的时候会自动的切换栈,就是切换 SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。一个由C/C++编译的程序 阅读全文

posted @ 2012-03-26 21:28 xiao_fu 阅读(289) 评论(0) 推荐(0) 编辑

2012年3月23日

结构体字节对齐

摘要: 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。 内存对齐的原因: 1)某些平台只能在特定的地址处访问特定类型的数据; 2)提高存取数据的速度。比如有的平台每次都是从偶地址处读取数据,对于一个int型的变量,若从偶地址单元处存放,则只需一个读取周期即可读取该变量;但是若从奇地址单元处存放,则需要2个读取周期读取该变量 阅读全文

posted @ 2012-03-23 20:12 xiao_fu 阅读(259) 评论(0) 推荐(0) 编辑

2012年3月22日

数组和指针

摘要: int **p;p是一个指针变量,它指向一个指向整型数据的指针变量int (*p)(); p为指向函数的指针,该函数返回一个整型值int *p(); p为带回一个指针的函数,该指针指向整型数据int p(); f为带回整型函数值的函数int (*p)[n]; p为指向含n个元素的一维数组的指针变量int *p[n];定义指针数组p,它由n个指向整型数据的指针元素组成i n t a[n]; 定义整型数组a,它有n个元素int *p; p为指向整型数据的指针变量int i; 定义整型变量i 阅读全文

posted @ 2012-03-22 20:28 xiao_fu 阅读(153) 评论(0) 推荐(0) 编辑

2012年3月21日

2 *3键盘

摘要: //=========================================================================// 工程名称: Demo2440_key23 // 组成文件: key23.c// 功能描述: 2*3键盘,采用查询行列扫描,键值通过串口输出,行列独立扫描// 硬件连接: GPF0~GPF1与键盘行相连,GPF2~GPF4与键盘列相连//=========================================================================#include "2440addr.h" 阅读全文

posted @ 2012-03-21 21:42 xiao_fu 阅读(272) 评论(0) 推荐(0) 编辑

2012年3月14日

系统调用

摘要: 所谓系统调用就是内核提供的功能十分强大的一系列函数,这些系统调用在内核中实现,再通过一定的方式把系统调用给用户。系统调用是用户程序和内核交互的交口。二、 系统调用的作用 系统调用在Linux系统中发挥着巨大的作用.如果没有系统调用,那么应用程序就失去了内核的支持。 我们在编程时用到的很多函数,如fork、open等这些函数最终都是在系统调用里实现的,比如说我们有这样一个程序: C代码 #include<unistd.h> #include<stdio.h> intmain() { fork(); exit(0); } 这里我们用到了两个函数,即fork和exit,这两函 阅读全文

posted @ 2012-03-14 17:30 xiao_fu 阅读(191) 评论(0) 推荐(0) 编辑

(转)字符串指针与一维数组指针的区别

摘要: 字符串指针与一维数组指针有很多共同点,但也有一些区别:1、赋值有要求。 我们可以在程序中将一个字符串赋给一个字符串指针变量,但不可以将一个字符串赋给一个数组名。即:允许:char *p; p = "I am a teacher !"; 但不可心: char a[20]; a = "I am a teacher!";这是因为字符串指针变量本身是一个变量,而字符串代表了其首地址,因而赋值是理所当然的;但数组就不一样,数组一旦定义后,数组在内存中的存储单元即确定,数组名所代表的数组首地址即确定,它便不可改变,因而不可将一个字符串赋给数组名。2、指针变量必须有明 阅读全文

posted @ 2012-03-14 10:45 xiao_fu 阅读(332) 评论(0) 推荐(0) 编辑

2012年3月13日

怎么写Makefile

摘要: 内容简要说明 本文主要说明怎样写一个 makefile,用于 UNIX/C 编程环境下。对于每一 方面,我将只说明最简单的用法(别的我也不会,呵呵)。同时,因为我没 有办法在很多系统上测试 makefile ,所以只能说明一些应该是通用的参数 或用法。其他更深入的内容请参考手册:man make 。 呵呵,本文预先假设你知道 unix, c, make, cc, ar 等等是干什么用的。 这样我就不用解释过多东西了。 注: <s> 是指一个空格或一个tab - 制表符 <tab> 专指一个制表符! make 的工作原理和方法简介 make 根据... 阅读全文

posted @ 2012-03-13 17:42 xiao_fu 阅读(444) 评论(0) 推荐(0) 编辑

2012年3月12日

union 和 struct 的不同

摘要: struct 简单来说就是一些相互关联的元素的集合,说是集合,其实它们在内存中的存放是有先后顺序的,并且每个元素都有自己的内存空间。那么按照什么顺序存放的呢?其实就是按你声明的变量顺序来存放的,下面先看一个例子:struct sTest{int a; //sizeof(int) = 4char b; //sizeof(char) = 1shot c; //sizeof(shot) = 2}x;所以在内存中至少占用 4+1+2 = 7 byte。然而实际中占用的内存并不是7 byte,这就涉及到了字节对齐方式.union 的不同之处就在于,它所有的元素共享同一内存单元,且分配给 union 的内 阅读全文

posted @ 2012-03-12 20:49 xiao_fu 阅读(177) 评论(0) 推荐(0) 编辑

SRAM与SDRAM的区别

摘要: SDRAMSDRAM(Synchronous Dynamic Random Access Memory)同步动态随机存取存储器,同步是指Memory工作需要步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。目前的168线64bit带宽内存基本上都采用SDRAM芯片,工作电压3.3V电压,存取速度高达7.5ns,而EDO内存最快为15ns。并将RAM与CPU以相同时钟频率控制,使RAM与CPU外频同步,取消等待时间,所以其传输速率比EDO DRAM更快。SDRAM从发展到现在已经经历了四代, 阅读全文

posted @ 2012-03-12 20:12 xiao_fu 阅读(236) 评论(0) 推荐(0) 编辑

导航