Linux中的内存管理
一.在Linux操作系统的内存中共有五块空间:代码段,数据段,BBS段,堆和栈
代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存种的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。
数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配[1]的变量和全局变量。
BSS段[2]:BSS段包含了程序中未初始化全局变量,在内存中 bss段全部置零。
堆(heap):堆是用于存放进程运行中被动态分配的内存段,它大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
栈:栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味这在数据段中存放变量)。除此以外在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也回被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上将我们可以把堆栈看成一个临时数据寄存、交换的内存区。
二. 下老师布置的程序:
#include<stdio.h>
#include<malloc.h>
#include<unistd.h> //it contains sbrk() and brk()
int bss_var;
int data_var0 = 0;
int main(int argc,char **argy){
printf("below are addresses of types's menory\n");
printf("Text location:\n");
printf("\tAddress of main(Code Segement):%p\n",main);//fuction name is a pointer
int stack_var0 = 2;
printf("Stack Location:\n");
printf("\tInitial of stack:%p\n",&stack_var0);
int stack_var1 = 3;
printf("\tnew end of stack:%p\n",&stack_var1);
printf("Data Location:\n");
printf("\tAddress of data_var(Data Segement):%p\n",&data_var0);
static int data_var1 = 4;
printf("\tNew address of data_var(Data Segement):%p\n",&data_var1);
printf("BSS Locatin\n");
printf("\tAddress of bss_var:%p\n",&bss_var);
char *b = sbrk((ptrdiff_t)0);
printf("Heap Location :\n");
printf("\tInitial end
相关文档:
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
开机按[CTRL]+[ALT]+[F7]/[F8]可查看系统启动时正在启动的服务!!!!
众所周知Linux给我们提供了7中不同的启动级别0~6,那么不同的启动级别都会启动那些服务哪。可以使用chkconfig ——list 查看,可以使用chkconfig 服务名 ——level 3 {on|of}修改是否要再某个级别启动或停止。
1. 例 ......
重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。
在开启了防火墙时,做如下设置,开启相关端口,
修改/etc/sysconf ......
我为什么写这个题目呢,因为我今天要写的博与这三者都有关系,至少我个人认为是这样的。
有个人问了一个这样的小程序,说有问题:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector <string*> spvec;
string str;
cout & ......
http://blog.csdn.net/zengyang/archive/2009/01/07/3725320.aspx
http://tech.ccidnet.com/art/305/20071226/1322187_1.html
State
进程在执行过程中会根据环境来改变state。Linux进程有以下状态:
Running
进程处于运行(它是系统的当前进程)或者准备运行状态(它在等待系统将CPU分配给它) ......