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
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
Linux 释放内存方法
先看看内存使用状况
[root@node1 ~]# free -m
total used free shared buffers cached
Mem: 8004 6557 1446 0 163 5630
-/+ buffers/cache: 763 7240
Swap: 1983 0 1983
把内存里的数据暂时写到硬盘里
[root@node1 ~]# sync
修改 /proc/sys/vm/drop_caches文件
[root@node1 ~]# echo 3 > ......
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分配给它) ......