wince内存分配及管理

WinCE 5.0 软件合集(内置25个程序) 内置25个WinCE5.0程序,包括系统工具,媒体播放、游戏、计算器等 这些的程序都是由通过网络收集的 程序能都在WinCE5.0上完美运行(分别在WinCE5.0模拟器和装有WinCE5.0的导航仪上成功运行) 立即下载

一、引

今天打算规划一下播放器的内存管理,初步设想先做一个SingleBuffer,然后在用一个BufferPool来管理这堆SingleBuffer,于是动手开始画UML类图,确定属性和行为。但是遇到了一个问题,就用malloc和free两个C语言函数构造整个内存管理吗?不甘心,这太弱了,必须有功能强劲一些的WINCE API来支持,尤其是每个内存块的起始地址对齐,好用点至少得32位对齐吧,酷一点得支持按PAGE_SIZE对齐吧。于是翻啊翻,抓到个壮丁,VirtualAlloc, 貌似功能强大,再搜一下, TCPMP和RealSDK也用它, 用葛优的话说就是"VirtualAlloc, 全国XXX用户, 我相信群众". 最后顺带搜出这篇文章,实在是经典中的经典:
《Windows CE.NET 高级内存管理》 http://www.microsoft.com/china/MSDN/library/windev/WindowsCE/WCEdncenetadvmemmgmt.mspx?mfr=true 
似乎以前看过,或者当时看的那篇只是“内存管理”而没有“高级”二字,或者就是当时太菜了没理解透,现在仔细读了几遍,拜啊拜,高人所写。

WINCE HELP中对VirtualAlloc的说明里,对第一个参数pAddress描述里写到“If the memory is being reserved, the specified address is rounded down to the next 64-KB boundary. If the memory is reserved and is being committed, the address is rounded down to the next page boundary. ” 如果不是上面提到这篇文章,我根本就不会注意到这句,因为TCPMP里的用法是:
p = VirtualAlloc(NULL,n,MEM_COMMIT,PAGE_READWRITE);
这第一个参数根本就忽略过去了。

下面的代码试验是基于这篇文章的。其中我最担心的一点,就是文章是针对WinCE.net的,而目前我用的版本是5.0,文中所提到的一些限制,是否已经有所改进了呢。

二、测试64KB对齐的直接分配方式

写个测试代码验证一下

#include  " stdafx.h "
#include 
" Winbase.h "
#include 
" stdlib.h "

int  WINAPI WinMain(     HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
            LPTSTR    lpCmdLine,
            
int        nCmdShow)
{
     
//  TODO: Place code here.
     int  i  =   0 ;
    
void *  pMem  =  NULL;
    SYSTEM_INFO SystemInfo;

    GetSystemInfo(
& SystemInfo);

    printf(
" SystemInfo.dwPageSize = %d /n " , SystemInfo.dwPageSize);
    printf(
" SystemInfo.lpMinimumApplicationAddress = 0x%x /n " , ( int )SystemInfo.lpMinimumApplicationAddress);
    printf(
" SystemInfo.lpMaximumApplicationAddress = 0x%x /n " , ( int )SystemInfo.lpMaximumApplicationAddress);

    GlobalMemoryStatus(
& MemStatus);
    printf(
" MemStatus.dwTotalPhys = %d /n " , MemStatus.dwTotalPhys);
    printf(
" MemStatus. dwAvailPhys = %d /n " , MemStatus.dwAvailPhys);
    printf(
" MemStatus.dwTotalVirtual = %d /n " , MemStatus.dwTotalVirtual);
    printf(
" MemStatus.dwAvailVirtual = %d /n " , MemStatus.dwAvailVirtual);

    
while ( 1 )
    {
        pMem 
=  VirtualAlloc ( 0 ,  512 , MEM_RESERVE  |  MEM_COMMIT, PAGE_READWRITE);

        
if ( ! pMem)
        {
            printf(
" alloc %d times, failed, end " ,i + 1 );
            
break ;
        }
        
else
        {
            printf(
" 0x%X  " ,( int )pMem);
        }

        i
++ ;
    }

    GlobalMemoryStatus(
& MemStatus);
    printf(
" MemStatus.dwTotalPhys = %d /n " , MemStatus.dwTotalPhys);
    printf(
" MemStatus. dwAvailPhys = %d /n " , MemStatus.dwAvailPhys);
    printf(
" MemStatus.dwTotalVirtual = %d /n " , MemStatus.dwTotalVirtual);
    printf(
" MemStatus.dwAvailVirtual = %d /n " , MemStatus.dwAvailVirtual);

    
return   1 ;
}


运行结果:

SystemInfo.dwPageSize = 4096
SystemInfo.lpMinimumApplicationAddress = 0x10000
SystemInfo.lpMaximumApplicationAddress = 0x7fffffff
MemStatus.dwTotalPhys = 55,656,448
MemStatus.dwAvailPhys = 40,923,136
MemStatus.dwTotalVirtual = 33,554,432
MemStatus.dwAvailVirtual = 31,850,496
0x60000  0x70000  0x80000  0x90000 
0xA0000  0xB0000  0xC0000  0xD0000
......
0x1E40000 0x1E50000 0x1E60000 0x1E70000
0x1E80000 0x1E90000 0x1EA0000 0x1EB0000
alloc 487 times to failed, END
MemStatus.dwTotalPhys = 55,656,448
MemStatus.dwAvailPhys = 38,903,808
MemStatus.dwTotalVirtual = 33,554,432
MemStatus.dwAvailVirtual = 0

很好,和高级内存管理一文描述的情况一样, 不过还是有些意外的发现. 我们再来仔细看一下
(1) 所谓的next 64-KB boundary,换算成16进制也就是0x10000, 上面测试代码所得到的结果,的确是每次分配按0x10000递增的
(2) 的确在分配不足512次后,内存就用光了,分配失败停止了。512次计算为: (32M的进程虚拟地址空间 - 程序运行的一些开销) / 64K
(3) 计算一下刚才一共消耗了多少虚拟内存, 0x1EB0000 - 0x60000 = 0x1E50000 = 31,784,960 Byte,正好接近于32M.
那么实际上拿来使用的呢? ( 0x1EB0000 - 0x60000 ) / 0x10000 * 512 = 248,320 Byte
有没有搞错,我为了得到248K的内存来使用,却把32M虚拟内存用个精光
(4) 意外发现, 上面代码的物理内存的消耗量 = 40,923,136 - 38,903,808 = 2,019,328 并没有想象中的那么夸张真的用掉32M物理内存. 但它也不是512*487=249,344 Byte, 好玩乱试了一下,结果发现 2,019,328 / 4029 = 493, 正好整除, 并且略大于487, 那么可以理解为, (a) 物理内存的使用也是按PAGE_SIZE来消耗的,所以使用量必然为PAGE_SIZE的整数倍
(b) 虽然32M虚拟内存被消耗光了, 但实际上物理内存只消耗掉了VirtualAlloc Times * PAGE_SIZE, 因为我每次只要了512byte, 推测如果我每次要5000byte的话,那么物理内存消耗量就是VirtualAlloc Times * PAGE_SIZE * 2了.

TCPMP里似乎是犯了个错误,我在整个代码里搜索了一遍,的确是在所有调用VirtualAlloc的地方,第一个参数都是NULL或0。也就是说,TCPMP依靠其良好的内存回收管理机制,只用了不多次VirtualAlloc就得到了足够运行的内存,掩盖掉了在函数使用上的这个错误。比如MP3播放中,BUUFER CHAIN里每个内存是4096 byte,却需要使用一次VirtualAlloc用掉64K虚拟地址空间,虚拟内存的占用和使用比只有6.25%

所以WINCE应用程序中,要用VirtualAlloc进行内存分配正确方式,应该是按照“高级内存管理”一文中所说的方法,首先保留一块内存区域
pBase = VirtualAlloc (0, ReserveSize, MEM_RESERVE, PAGE_READWRITE);
注意第三个参数,只做MEM_RESERVE,而不直接MEM_COMMIT。按照文中所说,保留下来的内存区域,并不直接消耗掉物理内存。


三、测试只保留不提交的区域是否真正消耗内存

咱们来试一下

int  WINAPI WinMain(    HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
            LPTSTR    lpCmdLine,
            
int        nCmdShow)
{
    
void *  pMem  =  NULL;
    MEMORYSTATUS MemStatus;

    GlobalMemoryStatus(
& MemStatus);
    printf(
" MemStatus.dwTotalPhys = %d /n " , MemStatus.dwTotalPhys);
    printf(
" MemStatus. dwAvailPhys = %d /n " , MemStatus.dwAvailPhys);
    printf(
" MemStatus.dwTotalVirtual = %d /n " , MemStatus.dwTotalVirtual);
    printf(
" MemStatus.dwAvailVirtual = %d /n/n " , MemStatus.dwAvailVirtual);

    pMem 
=  VirtualAlloc( 0 ,  128 * 4096 , MEM_RESERVE, PAGE_READWRITE);

    GlobalMemoryStatus(
& MemStatus);
    printf(
" MemStatus.dwTotalPhys = %d /n " , MemStatus.dwTotalPhys);
    printf(
" MemStatus. dwAvailPhys = %d /n " , MemStatus.dwAvailPhys);
    printf(
" MemStatus.dwTotalVirtual = %d /n " , MemStatus.dwTotalVirtual);
    printf(
" MemStatus.dwAvailVirtual = %d /n " , MemStatus.dwAvailVirtual);
}

运行结果:
MemStatus.dwTotalPhys = 55,656,448
MemStatus.dwAvailPhys = 40,931,328
MemStatus.dwTotalVirtual = 33,554,432
MemStatus.dwAvailVirtual = 31,850,496

MemStatus.dwTotalPhys = 55,656,448
MemStatus.dwAvailPhys = 40,931,328
MemStatus.dwTotalVirtual = 33,554,432
MemStatus.dwAvailVirtual = 31,850,496
两次完全一样,对物理内存和虚拟内存都没有任何消耗。

无聊把上段代码的改成 MEM_RESERVE | MEM_COMMIT, 好奇看下运行结果
MemStatus.dwTotalPhys = 55,656,448
MemStatus.dwAvailPhys = 40,931,328
MemStatus.dwTotalVirtual = 33,554,432
MemStatus.dwAvailVirtual = 31,850,496

MemStatus.dwTotalPhys = 55,656,448
MemStatus.dwAvailPhys = 40,407,040
MemStatus.dwTotalVirtual = 33,554,432
MemStatus.dwAvailVirtual = 31,326,208
虚拟内存和物理内存消耗都正好是128*4096字节.


四、测试从保留内存从提交所需内存,按PAGE_SIZE自动对齐

最后,准备做内存块起始对齐了, 试验一下所谓的"If the memory is reserved and is being committed, the address is rounded down to the next page boundary"这个按PAGE_SIZE对齐是怎么回事

int  WINAPI WinMain(    HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
            LPTSTR    lpCmdLine,
            
int        nCmdShow)
{
    
int  i  =   0 ;
    
void *  pMem  =  NULL;

    pMem 
=  VirtualAlloc( 0 ,  10 * 4096 , MEM_RESERVE, PAGE_READWRITE);

    
while ( 1 )
    {
        printf(
" pAddress = 0x%X /t " , ( int )pMem  +   888 * i);

        pMem 
=  VirtualAlloc ( ( void * )(( char * )pMem  +   888 * i),  888 , MEM_COMMIT, PAGE_READWRITE);

        
if ( ! pMem)
        {
            printf(
" alloc %d times, failed, end " ,i + 1 );
            
break ;
        }
        
else
        {
            printf(
" pActual = 0x%X  " ,( int )pMem);
        }

        i
++ ;
    }
}

恶搞一下,每次分配888字节内存.
结果是比较让人惊讶的
pAddress = 0x60000    pActual = 0x60000
pAddress = 0x60378    pActual = 0x60000
pAddress = 0x606F0    pActual = 0x60000
pAddress = 0x60A68    pActual = 0x60000
pAddress = 0x60DE0    pActual = 0x60000
pAddress = 0x61158    pActual = 0x61000
pAddress = 0x624D0    pActual = 0x62000
pAddress = 0x63848    pActual = 0x63000
pAddress = 0x64BC0    pActual = 0x64000
pAddress = 0x65F38    pActual = 0x65000
pAddress = 0x672B0    pActual = 0x67000
pAddress = 0x69628    pActual = 0x69000
pAddress = 0x6B9A0
alloc 13 times, failed, end
其中0x60000被重复分配了五次,如果是在实际应用中,这块数据恐怕被覆盖得骨头渣子也找不到了. 但仔细看看这句话,If the memory is reserved and is being committed, the address is rounded down to the next page boundary, 确实,谁都没错.比如在0x60378地址上,这个地址被保留了而未提交, 那么就不会轮到下一个PAGE, 而是当前PAGE的起始地址.
所以, 很重要的一点就是,在从保留区域用MEM_COMMIT的方法取得实际内存时, Virtual第一个参数长度必须是PAGE_SIZE的整数倍, 否则很可能就出现内存重叠覆盖的情况了.

关于VirtualAlloc的基本使用和测试代码到这边就可以结束了, 有发现什么新的关键点再继续写好了

转贴: http://www.cnblogs.com/walzer/archive/2007/01/22/626562.html

 

android 屏幕测试源码 自己写的 android 屏幕测试 显示在全屏状态下,测试 R G B三色 和 全黑,全白几种状态 立即下载

相关推荐

别再纠结了!手把手教你根据项目需求选对目标检测框架(MMDetection/Detectron2/YOLOv8实战对比)

本文详细对比了三大目标检测框架MMDetection、Detectron2和YOLOv8的适用场景与实战技巧,帮助开发者根据项目需求精准选型。从毕业设计到工业落地,分析不同场景下的核心需求与框架优势,提供决策树和避坑指南,确保技术选型与项目目标高度匹配。

weixin_30342209的博客 553

WinCE5.0中VirtualAlloc内存分配的试验代码

一、引今天打算规划一下播放器的内存管理,初步设想先做一个SingleBuffer,然后在用一个BufferPool来管理这堆SingleBuffer,于是动手开始画UML类图,确定属性和行为。但是遇到了一个问题,就用malloc和free两个C语言函数构造整个内存管理吗?不甘心,这太弱了,必须有功能强劲一些的WINCE API来支持,尤其是每个内存块的起始地址对齐,好用点至少得32位对齐吧,酷

新州隐士专栏 1464

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1950

为什么wince5.0 只能支持最大内存是512M?

   在论坛里面有不少人问起wince5(wince6尚未看过)的最大支持内存是多少,听前人说最大是512M,刚才看了会Programming Windows CE 3rd 这本书的wince内存结构部分,讲的比较明白。      The address space above the 2-GB boundary, addresses 8000 0000 through FFFF FF

gooogleman#foxmail.com 4678

HUMAnN 3.0 (alpha)安装及使用

文章目录简介安装数据库下载运行参考 简介 安装 conda install humann humann_test (~1 minute) 数据库下载 humann_databases --download chocophlan full /path/to/databases --update-config yes humann_databases --download uniref uniref90_diamond /path/to/databases --update-config yes humann_

dys的博客 9504

28、解码清华SSVEP基准数据集:从EEG信号到深度学习模型的实战指南

本文详细解析了清华大学SSVEP基准数据集的处理与深度学习模型构建全流程。从EEG信号预处理、数据维度变换到SSVEP分类模型设计,提供了实战代码示例和关键技巧,帮助读者掌握脑机接口领域的数据处理方法与模型优化策略。

weixin_29029995的博客 176

内存分配方式

在Windows中,系统为大家提供了很多种内存的分配方式,包括new,malloc(),HeapAlloc(),VirtualAlloc()等,那么它们的区别是什么呢?彼此有没有联系呢?下面对此来做个比较和总结。 (1)new是C++的运算符,操作的是默认堆,具备编译器可控制的操作,可以完成C++类对象的构造,适合小型数据的内存分配,操作简单方便。 (2)malloc是c提供的库函数,操作的是

wangkechuang的专栏 921

MS1861宏晶微视频显示与控制器芯片:开发资料全解析与应用指南

本文全面解析了宏晶微MS1861视频显示与控制器芯片的核心功能与开发流程。该芯片作为高性能的“视频信号翻译官”,支持HDMI、LVDS等多种输入与MIPI、LVDS等输出,集成强大的图像处理与OSD叠加功能。文章详细介绍了从资料获取、环境搭建到以HDMI转MIPI为例的实战配置与调试技巧,为工业HMI、广告机等应用的开发者提供了完整的应用指南。

weixin_29198045的博客 337

windows核心编程--探索虚拟内存

-系统信息VOID GetSystemInfo(LPSYSTEM_INFO psi);dwPageSize:页面大小 dwAllocationGranularity:分配粒度-虚拟内存状态VOID GlobalMemoryStatusEx(LPMEMORYSTATUS lpBuffer);把一个进程地址空间中被保存在内存中的那些页面,称为它的工作集。BOOL GetProcessMemoryInf

x13262608581的博客 327

【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【固定滑窗】2024E-考勤信息【欧弟算法】全网注释最详细分类最全的华为OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 618

Vue3 - 详解播放m3u8视频流+HLS拉流推流完整方案,vue3如何播放m3u8格式文件实时视频播放教程(流媒体播放、直播视频流、实时摄像头监控视频流对接、后端服务器切片分片传输视频流边下边播)

vue3组件播放m3u8格式视频,实现hls流媒体监控摄像头实时播放,vue3播放m3u8视频流格式,实时直播画面视频流播放,摄像头监控画面推流,hls.js,Vue Video.js播放m3u8视频流格式,实现hls流媒体监控摄像头实时播放,vue中使用video.js播放m3u8格式的视频,m3u8格式视频,通过HLS协议播放m3u8格式视频,黑屏不显示怎么办,视频非常卡加载缓慢,拉流报错,推流报错,播放失败,播放监控m3u8视频流格式,苹果ios播放,vue3中使用video标签播放MP4,西瓜视频插

🏆 前端领域优质创作者 5932

Git Bash 闪退,异常信息:VirtualAlloc pointer is null 解决方案

通过cmd命令窗口,进入到安装Git所在盘符,运行rebase.exe -b 0x50000000 msys-1.0.dll文件就行了 C:\Users\gao>e: E:\Program Files (x86)\Git\bin>rebase.exe -b 0x50000000 msys-1.0.dll E:\Program Files (x86)\Git\bin>

gaochen519的博客 1029

基于STM32L4XX、HAL库的ESP32-S3-WROOM-1-N4 WIFI模块驱动程序设计

/ 检查是否收到完整的一行(以\r\n结尾)// 例如: 解析AT命令响应或MQTT消息等。// UART2初始化已在CubeMX中配置。// USART2初始化函数(由CubeMX生成)// 缓冲区溢出,重置。// 如果需要等待响应。// 处理接收到的数据。// 处理接收到的数据。// 等待ESP32模块启动。// 主循环其他任务。// 启用UART全局中断。// 发送HTTP GET请求。// 发送AT测试命令。// 连接Wi-Fi。// UART中断回调函数。

zhusl6688的博客 286

WINCE内存管理基础

 WINCE内存管理基础http://www.armce.com/bbs/thread-24-1-3.html

WinCE开发 673

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

WinCE 虚拟内存机制!

WinCE 虚拟内存机制

林木卡赫 1563

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Windows CE内存管理

                  WinCE内存管理报告1.     Windows CE支持虚拟内存动态分配(virtual memory allocation),局部和单独的堆空间(Local and separate heaps),甚至内存映射文件(memory_mapped files,memory mapping simplifies file access. Instead

bilincsdn的专栏 1891

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

如何避免WinCE 内存分配失败?

http://space.itpub.net/12325938/viewspace-594680   近几天,我在开发一款嵌入式移动产品项目上遇到了一点麻烦。这个应用是ARM9内核和WinCE平台,这几天我一直被纠缠在一个内存问题,程序吃内存很厉害,跑一段时间后,内存占用就接近100%了,出现所谓的假死机。   看任务管理器里面的程序内存使用一直都很正常,但整个系统的内存却在被缓慢的侵蚀,但

JUNGOU1的专栏 1120

WINCE6.0操作系统---内核(kernel)学习

备注:这里的内核指kernel,其表现形式为kernel.dll,OS指操作系统,core指核心。     图1 WINCE6.0体系结构 1.      kernel的组成和功能 WINCE6.0操作系统内(kernel)在代码中的表现形式是kernel.dll(也就是kern.dll), WINCE5.0中内核的表现形式为NK.exe,而WINCE6.

学习是为了探索这个世界的本质 1137

WinCE驱动开发问题精华集锦

WinCE驱动开发问题精华集锦 2010年08月05日   在mediaplayer全屏播放的时候,我可以用键盘上的某一个键调节声音大小,现在我想在屏幕上显示调节的结果就跟我们看电视一样能出来一些标记。当声音变大在屏幕上就增多,当声音变小的时候就减少   得到播放窗口的DC,然后在上面显示一个不同颜色的矩形或者其它形状。   在ce自制平台中如何添加自己的驱动?cec文件和reg...

mohc01mohc 121

WINCE--程序内存和存储内存及其分配方法_人生几何_新浪博客

Wince 下的内存实际上是分为三个部分的. 先说这几部分的名字,对象存储, 系统内存,程序内存. 准确来讲,应该用下面公式说明Wince内存 = 系统内存 + (对象存储 + 程序内存).这里德内存也就是我们平时说的SDRAM,而我们的平台用的64M的SDRAM。 在wince系统的控制面板系统中可以看到系统内存在30M左右,但是硬件上SDRAM明明是64M,为什么这里只有30M呢...

人生几何的博客 233

WINCE--程序内存和存储内存

Wince 下的内存实际上是分为三个部分的. 先说这几部分的名字,对象存储, 系统内存,程序内存. 准确来讲,应该用下面公式说明Wince内存 = 系统内存 + (对象存储 + 程序内存).这里德内存也就是我们平时说的SDRAM,而我们的平台用的64M的SDRAM。 在wince系统的控制面板系统中可以看到系统内存在30M左右,但是硬件上SDRAM明明是64M,为什么这里只有30M呢?因为wi...

weixin_30748995的博客 239

wince 内存释放_如何避免WinCE 内存分配失败?

【IT168 专稿】近几天,我在开发一款嵌入式移动产品项目上遇到了一点麻烦。这个应用是ARM9内核和WinCE平台,这几天我一直被纠缠在一个内存问题,程序吃内存很厉害,跑一段时间后,内存占用就接近100%了,出现所谓的假死机。看任务管理器里面的程序内存使用一直都很正常,但整个系统的内存却在被缓慢的侵蚀,但就是看不出来是程序哪一部份使用了过多的内存。反复的查程序,也没发现内存泄漏,需要不断的修改内存...

weixin_39757739的博客 285

winCE的内存管理

winCE的内存管理早期winCE的存储设备一般采用ROM+MAM,ROM保存CE内核文件,应用程序,而RAM用于内核,所有应用程序运行时使用。后出现了永久存储设备。Flash,IDE。取代了ROM。在ROM中存放的所有文件可是压缩的也可以是不压缩的。这取决于OEM。对于ROM中存放的模块来说。如果是压缩的,模块在运行前先解压并全部存放在RAM中。如果不是压缩的。并且ROM介质支线性访问,就可以本

1782

wince bib文件解析

BIB的全称为Binary Image Builder,在Wince编译过程中的最后MakeImage阶段会用到BIB文件,BIB文件的作用是指示构建系统如何构建二进制映像。所有的BIB文件会被合并成CE.bib文件,然后打包工具Romimage.exe会根据BIB文件中的描述来决定哪些文件最终被包含到WINCE image中,BIB文件还决定了WINCE设备内存的分配,比如定义了WINCE im

a6930756的专栏 504
上一篇: WINCE应用程序和驱动间通信
下一篇: wince内存配置的一些体会
alien75
博客等级 码龄25年 195粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值