首页 > 其他分享 >inline 害死人

inline 害死人

时间:2023-09-27 18:35:35浏览次数:20  
标签:害死 函数 问题 编译 内联 修饰 inline

问题

函数编译问题,报错link xxx函数 no find defined

问题分析

后面追代码发现这个函数在一个c文件被定义为内联函数,千查万查发现这个c文件能被编译到,,但是就是报找不到函数定义

于是详细看了下函数发现函数是被一个宏__STATIC_INLINE 修饰的,追了下这个宏发现是inline,后面尝试把这个inline 的宏去掉,发现编译是可以找到函数定义的

定位到原因:inline

问题本质:

inline修饰的函数是内联函数,这个函数非常神奇,被他修饰的函数一般都是”短小精悍“ ”使用频繁“,于是乎会产生一种奇特的现象:函数调用时间远远大于函数的执行时间

某位c语言的创始人为了解决该问题就发明了叫做-inline内联函数的关键字。使用他的目的只有一个:为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题

使用方法

 

标签:害死,函数,问题,编译,内联,修饰,inline
From: https://www.cnblogs.com/lzqd/p/17733387.html

相关文章

  • 4.2 Inline Hook 挂钩技术
    InlineHook是一种计算机安全编程技术,其原理是在计算机程序执行期间进行拦截、修改、增强现有函数功能。它使用钩子函数(也可以称为回调函数)来截获程序执行的各种事件,并在事件发生前或后进行自定义处理,从而控制或增强程序行为。Hook技术常被用于系统加速、功能增强、开发等领域。本......
  • rust 中#[inline]
    在Rust中,#[inline]是一个属性(attribute),用于告诉编译器对函数进行内联展开。内联展开是一种编译器优化技术,它将函数的代码直接嵌入到调用处,而不是通过函数调用的方式执行。这样做可以减少函数调用的开销,提高程序的执行效率,但也会增加代码的体积。在Rust中,#[inline]属性可以应用于......
  • 详解inline-block
    曾几何时,display:inline-block已经深入「大街小巷」,随处可见「display:inline-block;*display:inline;*zoom:1;」这样的代码。如今现代浏览器已经全面支持这个属性值了,上面的代码只是为了兼容IE6、7而已。那么你真的了解inline-block了吗?本文将带你深入剖析该属性值的前世......
  • 【八股文 03】extern、static、this、inline、volatile 关键字
    0概览以下为概览,如果看到问题都能基本想到答案,则不需要看正文中详细的内容extern作用static作用修饰变量局部变量全局变量类成员变量修饰函数普通函数类成员函数this指针this指针的类型为?在常函数里this指针的类型为?inline内联函数的特点与......
  • C++入门到放弃(05)——内联函数: inline
    ​1.基本用法要使用内联函数时,必须遵循如下规则:在函数声明前加上关键字inline,或着在函数定义前加上关键字inline,二者取其一即可。inlineintmax(inta,intb);//取其一即可inlineintmax(inta,intb){//取其一即可returna>b?a:b;}另外一种做......
  • css的inline-block布局方式对齐问题 —— 转载自 article/2023/7/31 16:26:21
    css的inline-block布局方式对齐问题今天在实现百度前端技术学院的如下案例时遇到了div上下对齐问题。针对如下左右两栏布局,本来使用将两栏各自div的display设置为inline-block方式来实现,为了左边高度与右边对齐,直接量出右边div按照像素高度赋给左边。但是左边元素竟然出现在了......
  • 2. Q_ 行内_inline_元素 设置_margin_top_和_margin_bottom_
    Q:行内(inline)元素设置margin-top和margin-bottom是否起作用?A:不起作用。(答案是起作用,个人觉得不对。)html里的元素分为替换元素(replacedelement)和非替换元素(non-replacedelement)。替换元素是指用作为其他内容占位符的一个元素。最典型的就是img,它只是指向一个图像......
  • 驱动开发:摘除InlineHook内核钩子
    在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一......
  • Twisted @defer.inlineCallbacks
    @defer.inlineCallbacks是Twisted框架中的一个装饰器,用于定义基于协程的异步函数。在使用Twisted进行异步编程时,常见的方式是使用回调函数来处理异步操作的结果。但是使用回调函数可能会导致代码复杂、难以维护和阅读。因此,Twisted提供了@defer.inlineCallbacks装饰器,通......
  • 驱动开发:摘除InlineHook内核钩子
    在笔者上一篇文章《驱动开发:内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一......