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
相关文档:
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......
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 > ......
重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。
在开启了防火墙时,做如下设置,开启相关端口,
修改/etc/sysconf ......
这篇文档实用性很强,它不是讲某个命令的参数具体含义,而是从实际
工作的角度来考虑,完成什么工作需要什么指令。
下面是我们经常要做的一些事情。在下面具体参数意义不解释,要了解这些
可以查询该命令帮助文档
1.
创建目录
mkdir
NO1.
在当前路径创建一级目录
[root@rehat
root]# mkdir test
NO2.
......