成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.Net8的AOT引導程序BootStrap

開發 前端
所謂的引導程序,也就是引導被ILC生成的目標文件編譯成可執行文件,然后在相應的平臺上(MacoS/Linux/Win)進行二進制執行。這里以微軟自家的Windows平臺為例來剖析下這段引導程序。

前言

.Net8的本地預編機器碼AOT,它幾乎進行了100%的自舉。微軟為了擺脫C++的鉗制,做了很多努力。也就是代碼幾乎是用C#重寫,包括了虛擬機,GC,內存模型等等。而需要C++做的,也就僅僅是引導程序,本篇通過代碼來看下這段至關重要的引導程序的運作模式。

概括

所謂的引導程序,也就是引導被ILC生成的目標文件編譯成可執行文件,然后在相應的平臺上(MacoS/Linux/Win)進行二進制執行。這里以微軟自家的Windows平臺為例來剖析下這段引導程序。

引導程序分為兩個階段,其一初始化運行時,其二運行托管的Main入口代碼。分別看下,最后就是代碼展示了。

1.實例化運行時

這個很好理解,你如果需要運行.Net程序那么必須有一個運行的環境,第一步就是初始化這個運行環境。它主要包括以下步驟:

一:環境變量的初始化

環境變量的初始化主要是指設置的環境變量,對于GC或者JIT的控制。在這里進行一個初始化和區分。比如開啟了了內存映射的環境變量
DOTNET_EnableWriteXorExecute=1.它就是此時被AOT識別并進行區分。

二:注冊AOT的模塊

AOT程序需要用到哪些模塊,比如

Runtime.WorkstationGC.lib
System.Globalization.Native.Aot.lib
System.IO.Compression.Native.Aot.lib
eventpipe-disabled.lib
Runtime.VxsortDisabled.lib

等一些模塊需要用到,那么這里進行注冊下,以便后續調用。

三:模塊的初始化

這里的模塊初始化實際上,R2R的部分預編譯函數替代。

2.托管的Main入口

.Net里面托管的Main函數是一切托管函數的入口點,所以托管Main入口是必須設置正確,并且能夠運行完整托管代碼。本例展示的托管Main如下:

static void Main()
{
   Program pm=new Program();
   pm = null;
   GC.Collect();
   Console.WriteLine("This is Ce Shi");
   Console.ReadLine();
}

3.代碼展示

上面只是一些概念,具體的行為落實,還得代碼來。這里看下BootStrap引導程序的代碼。

一:節操作:

節存變量

主要是在初始化運行時的模塊初始化階段需要用到

#pragma section(".modules$A", read)
#pragma section(".modules$Z", read)
extern "C" __declspec(allocate(".modules$A")) void* __modules_a[];
extern "C" __declspec(allocate(".modules$Z")) void* __modules_z[];
__declspec(allocate(".modules$A")) void* __modules_a[] = { nullptr };
__declspec(allocate(".modules$Z")) void* __modules_z[] = { nullptr };

節合并

這里主要是然鏈接器進行一個節的合并

#pragma comment(linker, "/merge:.modules=.rdata")
#pragma comment(linker, "/merge:.unbox=.text")

節聲明函數

實例化運行時注冊AOT模塊的時候要用到

char _bookend_a;
char _bookend_z;


#pragma code_seg(".managedcode$A")
void* __managedcode_a() { return &_bookend_a; }
#pragma code_seg(".managedcode$Z")
void* __managedcode_z() { return &_bookend_z; }
#pragma code_seg()

AOT運行環境的初始化

static int InitializeRuntime()
{
    //環境變量的初始化
    if (!RhInitialize())
        return -1;
    //獲取當前模塊的句柄
    void* osModule = PalGetModuleHandleFromPointer((void*)&__managed__Main);


    //注冊AOT模塊
    if (!RhRegisterOSModule(
        osModule,
        (void*)&__managedcode_a, (uint32_t)((char*)&__managedcode_z - (char*)&__managedcode_a),
        (void*)&__unbox_a, (uint32_t)((char*)&__unbox_z - (char*)&__unbox_a),
        (void**)&c_classlibFunctions, _countof(c_classlibFunctions)))
    {
        return -1;
    }
    //初始化需要的模塊
    InitializeModules(osModule, __modules_a, (int)((__modules_z - __modules_a)), (void**)&c_classlibFunctions, _countof(c_classlibFunctions));


#ifdef NATIVEAOT_DLL
    // Run startup method immediately for a native library
    __managed__Startup();
#endif // NATIVEAOT_DLL


    return 0;
}

托管入口

return __managed__Main(argc, argv);

以上是.Net8的AOT引導程序的大致運作模式。

完整代碼在GitHub:https://github.com/tangyanzhi/jianghupt/releases/download/Aot_bootstrap/AOT-BootStrap.rar


責任編輯:武曉燕 來源: 江湖評談
相關推薦

2023-09-11 08:40:34

AOTVMP代碼

2023-07-09 23:55:16

C++RoslynILC

2023-11-17 13:42:06

.NET8C#工具

2023-07-14 08:29:55

AOT.Net程序

2023-10-07 10:16:18

.Net8GC內存

2023-12-15 17:09:28

.NET8Primitives性能

2023-11-17 08:52:32

.NET8C#

2023-11-06 10:03:01

.Net8類型轉換

2024-08-30 09:21:28

2023-11-15 09:34:27

.NET 8代碼生成器

2024-10-11 14:42:59

2024-11-07 12:33:47

2025-04-02 07:40:30

2023-12-27 07:33:54

2024-09-29 15:21:01

2024-11-12 07:28:39

2025-02-24 02:00:00

.NET8Web開發

2025-04-01 04:03:00

.NET8C#CPU

2023-09-21 08:46:44

操作系統windows 10內存

2016-09-21 09:55:07

Linux引導程序GNU GRUB
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产999精品久久久影片官网 | 拍拍无遮挡人做人爱视频免费观看 | a免费视频| 亚洲一区二区国产 | 亚洲一区视频 | 亚洲国产精久久久久久久 | 免费在线观看黄视频 | 国产精品免费一区二区三区四区 | 亚洲成人激情在线观看 | 久久av一区二区三区 | 欧美一级免费看 | 国产黄色在线观看 | 国产国拍亚洲精品av | 在线视频一区二区 | 精品一区二区三区视频在线观看 | 国产一区二区视频免费在线观看 | 欧美精品一区二区免费 | 国产成视频在线观看 | 亚洲 欧美 日韩在线 | 亚洲精品乱码久久久久久久久 | 毛片综合 | 亚洲网站在线观看 | 精品国产一区一区二区三亚瑟 | 亚洲精品视频在线看 | 亚洲人成人一区二区在线观看 | 伊人网综合在线 | 欧美精品久久久久 | 中文字幕乱码一区二区三区 | 爱爱爱av | 日日爱夜夜操 | 成人激情视频 | 91免费看片| 色视频网站 | 久久精品色欧美aⅴ一区二区 | 国产精品久久久久久久久久妇女 | 情侣酒店偷拍一区二区在线播放 | 99re视频在线观看 | 国产日韩一区二区三免费高清 | 国产麻豆乱码精品一区二区三区 | 91夜夜夜 | 91久久久久久久久 |