运行时库的理解

2024-02-03 20:58
文章标签 运行 理解 时库

本文主要是介绍运行时库的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.什么是运行时库

运行时库(Runtime Library)是程序运行时所需要的库文件.

它把具有语言特性(language feature)的函数放到了库函数中.例如C运行时库中包含了fopen(), strcpy()这些非核心语言的特性.

For example, the C runtime library is a library containing things like fopen() for opening files or strcpy() for copying strings. While the compiler understands the core language (ifwhile and so on, including how to call functions), the non-core-language features are provided as libraries containing functions that can be called.


在Windows下通常为lib或者dll的文件,比如libcmt.lib, msvcrt.lib+msvcrtxx.dll.如果你安装了VS2010,在安装目录下的VC\crt\src下有运行时库(CRT)的源代码,这里既有C的文件(如output.c、stdio.h等),也有C++的文件(如iostream、string)。

2.运行时库的作用

(1)提供C标准库或者C++标准库.

(2)为程序提供启动函数.启动函数主要进行一些初始化操作:比如初始化全局变量,加载用户程序的入口函数

void mainCRTStartup(void)
{int mainret;/*获得WIN32完整的版本信息*/_osver = GetVersion();_winminor = (_osver >> 8) & 0x00FF ;_winmajor = _osver & 0x00FF ;_winver = (_winmajor << 8) + _winminor;_osver = (_osver >> 16) & 0x00FFFF ;_ioinit(); /* initialize lowio *//* 获得命令行信息 */_acmdln = (char *) GetCommandLineA();/* 获得环境信息 */_aenvptr = (char *) __crtGetEnvironmentStringsA();_setargv(); /* 设置命令行参数 */_setenvp(); /* 设置环境参数 */_cinit(); /* C数据初始化:全局变量初始化,就在这里!*/__initenv = _environ;
 mainret = main( __argc, __argv, _environ ); /*调用main函数*/exit( mainret );
}

3.VS运行时库的几种类型

 其中/MD,/MDd(动态库)是主流选择,即程序运行时通过动态链接的方式来加载,这样内存中只需要保留一份库文件.

注意使用运行时库时,Debug模式下使用Debug版本的,Release模式下使用Release版本的.

————————————————

参考链接:

1.https://stackoverflow.com/questions/25598098/runtime-library-vs-dynamic-library

2.https://blog.csdn.net/luoweifu/article/details/49055933

这篇关于运行时库的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675401

相关文章

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl