哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在windows上安裝或執(zhí)行程序遇到的runtime是什么?

Q4MP_gh_c472c21 ? 來源:寫個解 ? 作者:吳夢龍 ? 2021-03-17 09:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

??什么是runtime

在windows上安裝或執(zhí)行程序,都有機會遇到詞匯——runtime。

CRT(C runtime library)

Microsoft Access 2016 Runtime

microsoft visual c++ runtime library

C Runtime

Visual C++ 2008 Runtime

.NET Common Language Runtime

runtime究竟是什么,首先runtime在英文里是合成單詞,無論是英文還是中文都容易在文字層面被誤解,中文直譯“運行時”,中文的斷句容易引起歧義,究竟是“運行、時”還是“運行時”傻傻分不清。

為了準確描述runtime的實際意思,我認為runtime換成execution environment理解起來更容易:即位應用程序的執(zhí)行準備運行環(huán)境。

運行時庫是在編譯時使用的特殊庫,用于在計算機程序的執(zhí)行中實現(xiàn)內(nèi)置于編程語言中的功能,包括:輸入、輸出、內(nèi)存管理。

crt0

比如C語言需要的最小runtime叫做crt0(C runtime)?!癱rt”代表 “c runtime”,“0”代表“最基本、最開始”。crt0應該包含如下7個步驟。異常向量配置

_start函數(shù)和stack初始化

cache 初始化

清除BSS

構(gòu)造函數(shù)和析構(gòu)函數(shù)處理

C初始化功能

調(diào)用main入口這個crt0的結(jié)構(gòu)看起來是不是很熟悉?沒錯,在u-boot源碼啟動代碼看到類似結(jié)構(gòu)。

.text.globl _start_start: # _start is the entry point known to the linker xor %ebp, %ebp # effectively RBP := 0, mark the end of stack frames mov (%rsp), %edi # get argc from the stack (implicitly zero-extended to 64-bit) lea 8(%rsp), %rsi # take the address of argv from the stack lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack xor %eax, %eax # per ABI and compatibility with icc call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main mov %eax, %edi # transfer the return of main to the first argument of _exit xor %eax, %eax # per ABI and compatibility with icc call _exit # terminate the program

crt0.S編譯生成crt0.o,今后gcc編譯的所有應用程序前都加上這段內(nèi)容,既然有crt0,那么再發(fā)揮想象力,是不是還會有crt1什么的呢,全盤搜索看到若干crt前綴的*.o文件,這些crt*.o文件合并起來被稱做 “runtime library”

運行時庫和標準庫區(qū)別

運行時庫(runtime library)與標準庫(standard library)不是一個東西。

標準庫和運行庫之間有一個非常重要的區(qū)別。盡管標準庫定義了程序員可以使用的功能,但不是編程語言的規(guī)范的一部分,至少在C語言中不是,運行時庫卻時程序運行所必需的部分。

舉個例子,printf()是C標準庫的一部分,程序的啟動是在運行時庫實現(xiàn)的,啟動過程對程序員不可見,因此,你編寫的程序可以不使用標準庫,但始終需要運行時庫,否則無法運行。老實說,在操作系統(tǒng)上編寫不使用標準庫的應用程序幾乎無實際意義,那樣的程序沒有訪問外設(shè)的方法、屏幕上不會輸出令人印象深刻的結(jié)果。在裸機上情況就不一樣了,訪問外設(shè)不需要系統(tǒng)調(diào)用,沒有系統(tǒng)的權(quán)限隔離,外設(shè)的寄存器也有讀寫權(quán)限。

簡單編寫一個只有main

int main(int argc, char **argv){ return 0;}

編譯后看看符號表:gcc a.c

readelf -s a.out很多不知那來的函數(shù)符號都來源與crt*.o,如register_tm_clones源于crtbegin.o;__data_start、__libc_start_main源于crt1.o

31: 0 FILE LOCAL DEFAULT ABS crtstuff.c32: 0 FUNC LOCAL DEFAULT 13 deregister_tm_clones33: 0 FUNC

LOCAL DEFAULT 13 register_tm_clones34: 0 FUNC

LOCAL DEFAULT 13 __do_global_dtors_aux35: 1 OBJECT LOCAL DEFAULT 24 completed.732536: 0 OBJECT

LOCAL DEFAULT 19 __do_global_dtors_aux_fin37: 0 FUNC LOCAL DEFAULT 13 frame_dummy38: 0 OBJECT

LOCAL DEFAULT 18 __frame_dummy_init_array_39: 0 FILE LOCAL DEFAULT ABS a.c40: 0 FILE

LOCAL DEFAULT ABS crtstuff.c41: 0 OBJECT LOCAL DEFAULT 17 __FRAME_END__42: 0 FILE

LOCAL DEFAULT ABS 43: 0 NOTYPE LOCAL DEFAULT 18 __init_array_end44: 0 OBJECT

LOCAL DEFAULT 20 _DYNAMIC45: 0 NOTYPE LOCAL DEFAULT 18 __init_array_start46: 0 NOTYPE

LOCAL DEFAULT 16 __GNU_EH_FRAME_HDR47: 0 OBJECT LOCAL DEFAULT 22 _GLOBAL_OFFSET_TABLE_48: 0 FUNC

LOCALDEFAULT 10 _init49: 1 FUNC GLOBAL DEFAULT 13 __libc_csu_fini50: 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab51: 0 NOTYPE WEAK DEFAULT 23 data_start52: 0 NOTYPE GLOBAL DEFAULT 23 _edata53: 0 FUNC GLOBAL HIDDEN 14 _fini54: 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@@GLIBC_55: 0 NOTYPE GLOBAL DEFAULT 23 __data_start56: 0 NOTYPE WEAK DEFAULT UND

__gmon_start__57: 0 OBJECT GLOBAL HIDDEN 23 __dso_handle58: 4 OBJECT GLOBAL DEFAULT 15 _IO_stdin_used59: 93 FUNC GLOBAL DEFAULT 13 __libc_csu_init60: 0 NOTYPE GLOBAL DEFAULT 24 _end61: 43 FUNC GLOBAL DEFAULT 13 _start62: 0 NOTYPE GLOBAL DEFAULT 24 __bss_start63: 18 FUNC GLOBAL DEFAULT 13 main64: 0 OBJECT GLOBAL HIDDEN 23 __TMC_END__65: 0 NOTYPE WEAK DEFAULT UND

_ITM_registerTMCloneTable66: 0 FUNC WEAK DEFAULT UND __cxa_finalize@@GLIBC_2.2

原文標題:runtime是什么

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3706

    瀏覽量

    94330
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146174

原文標題:runtime是什么

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    安裝官方 Ubuntu 23.10 映像時報錯,求解決

    的 Ubuntu |Ubuntu 的 Ubuntu,使用 Balena 蝕刻器將該文件刷新到 SD 卡(我 Windows 運行),并嘗試使用 M.2 插槽中的 NVMe 啟動。sbc 啟動,但我只收到
    發(fā)表于 02-10 06:54

    office 版本不同,到處可執(zhí)行程序出錯

    本帖最后由 opticalchang 于 2025-12-29 12:41 編輯 編寫程序所用的office 是2016版, 可執(zhí)行程序安裝了office 2007版本的電腦
    發(fā)表于 12-29 10:32

    Windows和Linux環(huán)境下分別使用Olimex和蜂鳥調(diào)試器下載程序

    本隊伍編號CICC3042,本篇文章介紹Windows和Linux環(huán)境下分別使用Olimex和蜂鳥調(diào)試器下載程序,和一篇Hbirdv2的移植配合使用。 使用過第一版蜂鳥的同學
    發(fā)表于 10-31 08:26

    程序加載過程中遇到的問題及其解決方法

    。重新啟動Nuclei Studio,該問題解決。 (2)遇到的問題2:下載程序顯示未連接到開發(fā)板,報錯界面如下圖所示。 解決方法:配套文檔中,只要求安裝
    發(fā)表于 10-30 07:59

    從 APROM 切換到 LDROM 執(zhí)行程序更新時應使用什么軟件重置?

    從 APROM 切換到 LDROM 執(zhí)行程序更新時應使用什么軟件重置
    發(fā)表于 08-27 16:34

    為什么 USB 2.01(含更高版本)設(shè)備可以 Windows 7 中識別,但在 Windows 8 更高版本中無法識別?

    為什么 USB 2.01(含更高版本)設(shè)備可以 Windows 7 中識別,但在 Windows 8 更高版本中無法識別
    發(fā)表于 08-22 08:25

    從 APROM 切換到 LDROM 以執(zhí)行程序更新從 LDRO 切換時,應使用什么軟件重置?

    從 APROM 切換到 LDROM 以執(zhí)行程序更新從 LDRO 切換時,應使用什么軟件重置
    發(fā)表于 08-22 07:46

    keil調(diào)試階段無法進行仿真,能進到仿真界面,但是無法執(zhí)行程序怎么解決?

    keil調(diào)試階段無法進行仿真,能進到仿真界面,但是無法執(zhí)行程序,這個怎么解決?燒錄器用的是jlink
    發(fā)表于 07-18 06:08

    使用英特爾? NPU 插件C++運行應用程序時出現(xiàn)錯誤:“std::Runtime_error at memory location”怎么解決?

    使用OpenVINO?工具套件版本 2024.4.0 構(gòu)建C++應用程序 使用英特爾? NPU 插件運行了 C++ 應用程序 遇到的錯誤: Microsoft C++ exception: std::
    發(fā)表于 06-25 08:01

    請問Windows10下可以安裝USB2.0驅(qū)動么?

    請問Windows10下可以安裝USB2.0驅(qū)動么?為什么HID的實例無法運行,且用燒錄程序后,這樣顯示,能具體告知如何正確導入hid_kd程序
    發(fā)表于 06-03 10:22

    如何使用GSTREAMERWindows Appication獲得FX3-單色直播 (y8)?

    下面的帖子幫助我用 FFMPEG 和 GSTREAMER 用Linux應用程序流式傳輸FX3的單色相機,用Windows應用程序流式傳輸 FFPMEG 。 但是現(xiàn)在,我正在嘗試
    發(fā)表于 05-29 06:27

    為什么無法運行程序“make”(目錄“C:\\?

    FX2LP Build,得到了 14:26:46 **** 為項目 Fx2Test 構(gòu)建配置調(diào)試 **** 全部制作 無法運行程序“make”(目錄“C
    發(fā)表于 05-15 08:26

    如何在Android設(shè)備安裝Cyusb3014芯片驅(qū)動?

    1.如何在Android設(shè)備安裝Cyusb3014芯片驅(qū)動? 我們 Windows 上有 FX3 驅(qū)動程序 SDK。 2.如何在Andr
    發(fā)表于 05-15 07:23

    如何在Ubuntu安裝NVIDIA顯卡驅(qū)動?

    專有顯卡驅(qū)動。本文將詳細介紹Ubuntu系統(tǒng)安裝NVIDIA顯卡驅(qū)動的多種方法,幫助用戶根據(jù)自身情況選擇最適合的安裝方式。 二,硬件參數(shù) 平臺:PX22_GPU CPU:I7-11
    的頭像 發(fā)表于 05-07 16:05 ?2902次閱讀
    如何在Ubuntu<b class='flag-5'>上</b><b class='flag-5'>安裝</b>NVIDIA顯卡驅(qū)動?

    USB串行Windows驅(qū)動程序安裝程序無法下載是怎么回事?

    USB 串行 Windows 驅(qū)動程序安裝程序無法下載
    發(fā)表于 05-07 08:09
    黑龙江省| 休宁县| 盘锦市| 丰台区| 云梦县| 鹤山市| 伽师县| 思茅市| 铜陵市| 禹州市| 交城县| 宁波市| 吉水县| 康马县| 南郑县| 格尔木市| 双桥区| 西宁市| 成安县| 循化| 青海省| 景宁| 隆化县| 高平市| 闵行区| 姜堰市| 五原县| 井陉县| 安西县| 夏河县| 德兴市| 郎溪县| 鄂托克旗| 个旧市| 潼关县| 化州市| 集贤县| 车险| 当雄县| 邓州市| 浮山县|