程序段

操作系统——段式存储管理、段页式存储管理

我的未来我决定 提交于 2019-12-02 05:53:52
一、段式存储管理 1、分段 进程的地址空间 :按照程序 自身的逻辑 关系 划分为若干个段 ,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址。 内存分配规则: 以段为单位进行分配, 每个段在内存中占连续空间 ,但 各段之间可以不相邻 。 分段系统的逻辑地址结构由 段号(段名) 和 段内地址(段内偏移量) 所组成。 2、段表 每一个程序设置一个段表,放在内存,属于进程的现场信息 3、地址变换 4、段的保护 越界中断处理 进程在执行过程中,有时需要扩大分段,如数据段。由于要访问的地址超出原有的段长,所以发越界中断。操作系统处理中断时 ,首先判断该段的“扩充位”,如可扩充,则增加段的长度;否则按出错处理 缺段中断处理 检查内存中是否有足够的空闲空间 ①若有,则装入该段,修改有关数据结构,中断返回 ②若没有,检查内存中空闲区的总和是否满足要求,是则应采用紧缩技术,转 ① ;否则,淘汰一(些)段,转① 5、段的动态连接 为何要进行段的动态链接? 大型程序由若干程序段,若干数据段组成 进程的某些程序段在进程运行期间可能根本不用 互斥执行的程序段没有必要同时驻留内存 有些程序段执行一次后不再用到 静态链接花费时间,浪费空间 在一个程序运行开始时,只将主程序段装配好并调入主存。其它各段的装配是在主程序段运行过程中逐步进行的。每当需要调用一个新段时,再将这个新段装配好

条件编译#ifdef 和#endif

喜夏-厌秋 提交于 2019-11-29 20:09:02
转于 http://blog.csdn.net/fly_yr/article/details/39964035 C++中 #ifdef 和#endif的作用 一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是 “条件 编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。 其中#else部分也可以没有,即: #ifdef 程序段1 #denif 在头文件中使用#ifdef和#ifndef是非常重要的,可以防止双重定义的错误。 如你在头文件aaa.h中定义了一个类aaa如下: class aaa { }; 如果两次#include "aaa.h"(不见得是直接,也有可能两个不同的头文件中都包含了这个头文件)就会出错,因为相同的类不能定义两次。把aaa.h稍做修改: #ifndef _aaa_ #define _aaa_ class aaa { }; #endif 就可以避免这样的问题。 因为当你已经包含过这个文件,_aaa_就会有了定义,那么

条件编译ifndef、ifdef、endif

流过昼夜 提交于 2019-11-29 20:07:51
1、条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。 其中#else部分也可以没有,即: 1 #ifdef 2 程序段1 3 #endif 2、条件编译命令另一种形式: 1 #ifndef 标识符 2 程序段1 3 #else 4 程序段2 5 #endif 只是第一行与第一种形式不同:将“ifdef”改为“ifndef”。它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。这种形式与第一种形式的作用相反。 3、条件编译的例子 我们有一个数据类型,在Windows平台中,应该使用long类型表示,而在其他平台应该使用float表示,这样往往需要对源程序作必要的修改,这就降低了程序的通用性。可以用以下的条件编译: 1 #ifdef WINDOWS 2 #define MYTYPE long 3 #else 4 #define MYTYPE float 5 #endif 6 如果在Windows上编译程序,则可以在程序的开始加上 1 #define WINDOWS 这样则编译下面的命令行: #define MYTYPE long 如果在这组条件编译命令之前曾出现以下命令行: 1 #define WINDOWS 0

实例详解——编译器命令#pragma section作用于函数时作用范围是否覆盖到其子函数

拜拜、爱过 提交于 2019-11-29 07:28:23
在之前的博客【 链接脚本(Linker Script)应用实例(一)使用copy table将函数载入到RAM中运行 】中,我们第一步使用#pragma section命令将PFlashProgram函数存储至程序段.flash_driver,具体程序如下: #pragma section ".flash_driver" ax void PFlashProgram( uint32 flash, uint32 addr, uint32 word_l, uint32 word_u ) { uint32 load_cnt; uint16 endinitSfty_pw = IfxScuWdt_getSafetyWatchdogPasswordInline(); IfxFlash_enterPageMode(addr); /* wait until unbusy */ IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_P0); /* write 32 bytes (8 doublewords) into assembly buffer */ for (load_cnt = 0; load_cnt < 4; load_cnt++) { IfxFlash_loadPage2X32(addr, word_l, word_u); } /* write