二进制兼容

2024-06-12 14:28
文章标签 二进制 兼容

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

文章目录

    • 目的
    • 什么是二进制兼容
    • 如何会导致二进制不兼容
    • 二进制兼容安全性点
    • 二进制不兼容会造成什么后果
    • 二进制兼容问题处理
    • 参考博客

目的

了解二进制兼容, 以及对应保证使用二进制兼容时程序如何去做的。

什么是二进制兼容

二进制兼容(Binary Compatibility)是一个软件工程中的概念,它指的是在软件组件(如库、框架或操作系统服务)的更新过程中,新版本的组件能够与旧版本保持一定程度的互换性,即不需要重新编译那些依赖于该组件的应用程序或其它库,就能保证这些程序或库正常运行并发挥预期功能。

举个例子:

提供了一个dll的exe使用,突然改变了一下这个dll,这时如果exe不重新编译,使用新的dll也不会出问题,那么就可以说这个dll是二进制兼容的。

如何会导致二进制不兼容

二进制不兼容的根本原因是因为升级dll,导致与旧的对比其内存模型发生了改变。

  • 增加虚函数,会造成 vtbl 里的排列变化。(不要考虑“只在末尾增加”这种取巧行为,因为你的 class 可能已被继承。)
  • 改变虚函数声明顺序
  • 增加非静态属性。
  • 调整非静态属性的声明顺序
  • 给函数增加默认参数,现有的可执行文件无法传这个额外的参数
  • 增加默认模板类型参数
template<typename T

这篇关于二进制兼容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

二进制文件转化成文本文件

文章中如果有写错、表述不明、有疑问或者需要扩展的知识,欢迎留言或者私信~   1.区别 如果一个文件说是文本文件,使用任何一种文本编辑器打开可以展现出人类可读信息字符,因为编码都符合某种编码方式,如ASCII、UTF8、GB2312等等(在文件头可以读出来是什么编码方式,然后文本编辑器再按照规则去读取翻译成对应的字符,展示给我们的就是可读的了)。(关于编码方式不了解可以看这一篇) 如果一

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

剑指Offer—编程题10(二进制中1 的个数)

代码如下,请在JDK7及以上版本运行: public class Test10 {/*** 请实现一个函数, 输入一个整数,输出该数二进制表示中1的个数。* 例如把9表示成二进制是1001 ,有2位是1. 因此如果输入9,该出2。** @param n 待的数字* @return 数字中二进制表表的1的数目*/public static int numberOfOne(int

硬件上STM32F4xx兼容STM32F1xx的方案

前言 2020年开始,因为疫情,全球晶圆缺货,加上不少供应商屯芯片,导致ST的芯片价格一路飙涨,特别是STM32F1系列的单片机,价格涨的特别离谱,还缺货。。。。问了以下ST代理商,说STM32F1系列的属于168nm产品线的,正在被ST淘汰,让尽快用先进一点工艺的代替,手里有个项目用的STMF103VET6,代理商推荐先用STM32F401VE代替,国内现在右不少厂家可以pin2pin替代ST

递归实现十进制转二进制

#include<stdio.h>#include<stdlib.h>//输入一个十进制,自己写一个函数转换为二进制//10进制转2进制:方法是除以2取余,逆序排列 //如果想转换为 8进制,则把代码中的2改为8就OK //下面这个是递归!!! void change2(int num)//如果输入num为10 {if(num==0){return ; }else{/* 不能这样写

java字符串在内存和文件中编码的不同——如何理解进制(二进制)与编码(UTF-8)的关系

不管是在内存中,还是文件中,还是网络传输中,计算机运算和存储的都只能是二进制。 内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码;外码是程序与外部交互时外部使用的字符编码。 “外部”相对“内部”而言;不是char或String在内存里用的内部编码的地方都可以认为是“外部”。例如,外部可以是序列化之后的char或String,或者外部的文件、命令

二进制炸弹的fp是什么?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 问题描述   我在解二进制炸弹第四阶段的递归时,对主函数中的片段的理解如下: 8bc4: e3530002 cmp r3, #28bc8:

C语言笔试题:实现把一个无符号整型数字的二进制序列反序后输出

目录 题目 实例 方法一:直接交换 方法二:间接交换 拓展 题目 编写一个函数,将一个无符号整数的所有位逆序(在32位机器下) 实例 例如有一个无符号整数  unsigned int num = 32; unsigned int 在32位系统中占4个字节(32位) 32的二进制数是:       0000 0000 0000 0000 0000 0000  0010

【Rust日报】2021-7-29 与c相比,如何改善Rust巨大的二进制大小?

什么时候去使用#[inline] Reddit上有人问: 我一直在每一个我认为会经常被调用的函数上拼命地写#[inline],但这真的需要吗?inline只是提示编译器该函数可以被内联,而编译器可以忽略这一点或自行决定何时进行内联,所以我应该在什么时候用#[inline]标记我的函数?我正在制作一个使用一些自定义迭代器进行音频处理/合成的crate,我希望这些crate能快速运行。 推介阅读

探索 webkit 的奥妙,打造高效、兼容的现代网页

探索 webkit 的奥妙,并将其用于打造高效、兼容的现代网页,需要深入了解其内部工作机制、优化策略以及与其他浏览器引擎的兼容性处理。以下是一些关键步骤和考虑因素: 理解 WebKit 的基础: WebKit 是一个开源的浏览器渲染引擎,用于 Safari, Chrome(早期的版本)和其他一些浏览器。它负责解析 HTML、CSS 和 JavaScript,并将其转换为用户可以与之交互的视觉内