CRT启动函数学习笔记
来源:互联网 发布:淘宝卖家看到买家记录 编辑:程序博客网 时间:2024/06/08 14:03
CRT运行库启动函数分析:
在进入main函数之前,系统会调用CRT运行库的启动函数,做如下工作:
全局变量已完成初始化,
堆的初始化,
I/O也完成了初始化,
Main调用
写的绝逼的好阿!!!!很有助于分析代码!!
1. *****CRTStartUp()的框架:
******CRTStartUp()
{
/*初始化一些操作系统版本的全局变量*/
_osver = GetVersion();
_winminor = (_osver >> 8) & 0x00FF ;
_winmajor = _osver & 0x00FF ;
_winver = (_winmajor << 8) + _winminor;
_osver = (_osver >> 16) & 0x00FFFF ;
/*初始化堆*/
if ( !_heap_init(1) )
……………..
/*初始化I/O ,这样在main函数中才能直接使用printf 之类的函数,使用windows的SHE机制*/
try {
_ioinit();
}__except (_XcptFilter(GetExceptionCode(), GetExceptionInformation()) ){
_exit( GetExceptionCode() );
}
/*取得命令行参数*/
_wcmdln = (wchar_t *)__crtGetCommandLineW();
_wenvptr = (wchar_t *)__crtGetEnvironmentStringsW();
/*初始化main函数的argv参数*/
_wsetargv();
/*初始化环境变量*/
_wsetenvp();
/*初始化一些C数据,进行C库设置*/
_cinit();
/*调用main函数*/
mainret = main(__argc, __argv, _environ);
/*等待main函数返回,然后退出进程*/
exit(mainret);
}
--------------------------------------------------------------------------------------------------------------------
下面逐一分析各个阶段:
2. 初始化堆
调用的是_heap_init, 分析该函数:
int __cdecl _heap_init ( int mtflag /*多线程标志*/ )
{
/*调用HeapCreate 创见进程堆,*/
if ( (_crtheap = HeapCreate( mtflag ? 0 : HEAP_NO_SERIALIZE,
BYTES_PER_PAGE, 0 )) == NULL )
return 0;
// Pick a heap, any heap
__active_heap = __heap_select();
return 1;
}
初始化堆是非常紧急的事情,否则其他的很多事情都做不了,如果堆初始化失败,那么进程就直接退出了。
在进入main函数之前,系统会调用CRT运行库的启动函数,做如下工作:
全局变量已完成初始化,
堆的初始化,
I/O也完成了初始化,
Main调用
写的绝逼的好阿!!!!很有助于分析代码!!
1. *****CRTStartUp()的框架:
******CRTStartUp()
{
/*初始化一些操作系统版本的全局变量*/
_osver = GetVersion();
_winminor = (_osver >> 8) & 0x00FF ;
_winmajor = _osver & 0x00FF ;
_winver = (_winmajor << 8) + _winminor;
_osver = (_osver >> 16) & 0x00FFFF ;
/*初始化堆*/
if ( !_heap_init(1) )
……………..
/*初始化I/O ,这样在main函数中才能直接使用printf 之类的函数,使用windows的SHE机制*/
try {
_ioinit();
}__except (_XcptFilter(GetExceptionCode(), GetExceptionInformation()) ){
_exit( GetExceptionCode() );
}
/*取得命令行参数*/
_wcmdln = (wchar_t *)__crtGetCommandLineW();
_wenvptr = (wchar_t *)__crtGetEnvironmentStringsW();
/*初始化main函数的argv参数*/
_wsetargv();
/*初始化环境变量*/
_wsetenvp();
/*初始化一些C数据,进行C库设置*/
_cinit();
/*调用main函数*/
mainret = main(__argc, __argv, _environ);
/*等待main函数返回,然后退出进程*/
exit(mainret);
}
--------------------------------------------------------------------------------------------------------------------
下面逐一分析各个阶段:
2. 初始化堆
调用的是_heap_init, 分析该函数:
int __cdecl _heap_init ( int mtflag /*多线程标志*/ )
{
/*调用HeapCreate 创见进程堆,*/
if ( (_crtheap = HeapCreate( mtflag ? 0 : HEAP_NO_SERIALIZE,
BYTES_PER_PAGE, 0 )) == NULL )
return 0;
// Pick a heap, any heap
__active_heap = __heap_select();
return 1;
}
初始化堆是非常紧急的事情,否则其他的很多事情都做不了,如果堆初始化失败,那么进程就直接退出了。
- CRT启动函数学习笔记
- 学习笔记——中国剩余定理(CRT)
- CRT 入口函数 CRTStartup
- 废弃的CRT函数
- CRT函数解读
- fvwm学习笔记之启动和退出函数 by stack
- 什么是CRT函数以及常用的CRT函数
- 什么是CRT函数以及常用的CRT函数
- 内核启动学习笔记
- 一天一个CRT函数 _memccpy
- 一天一个CRT函数 memchr
- 一天一个CRT函数 memcmp
- 一天一个CRT函数 memcpy
- 一天一个CRT函数 _memicmp
- 一天一个CRT函数 memmove
- 一天一个CRT函数 memset
- 一天一个CRT函数 _swap
- 一天一个CRT函数 atof
- 自定义title样式
- android4.0导入外部库方式的变化
- MMX指令集在C++中的使用
- 修改tomcat默认iso8859-1的编码编码方式
- thinkphp的几个快捷方法
- CRT启动函数学习笔记
- 猖獗
- SAP 项目中的增强集合
- 全景摄影
- rman 恢复system
- oracle 11G 读书笔记之 tablespace
- win7中使用了第三方主题后,网页中的输入框和按钮就会变小解决方案
- ABAP处理日期到任何格式
- sqlserver output