标签: inline-functions

C++内联函数和特定于上下文的优化

我在Scott Meyers的Effective C++书中读过:

内联函数时,可以使编译器对函数体执行特定于上下文的优化.对于正常的函数调用,这种优化是不可能的.

现在的问题是:什么是特定于上下文的优化以及为什么需要它?

c++ optimization inline-functions compiler-optimization

4
推荐指数
1
解决办法
417
查看次数

为什么表值函数的性能优于select direct语句?

一只忙碌的猫

我使用AdventureWorks2012进行测试.和我的问题:为什么SELECT语句直接性能低于表值函数.我只将SELECT statemnt放入表值函数和完全相反的性能.

CREATE FUNCTION [dbo].[atest1]
(
    @iBusinessEntityID  INT
)
RETURNS @t TABLE
(
    [BusinessEntityID]  INT
  , [NationalIDNumber]  NVARCHAR(15)
  , [JobTitle]          NVARCHAR(50)
)
AS
    BEGIN
        INSERT INTO @t
               SELECT 
                   [e].[BusinessEntityID]
                 , [e].[NationalIDNumber]
                 , [e].[JobTitle]
               FROM [HumanResources].[Employee] [e]
               INNER JOIN [Person].[Person] [p]
                    ON [p].[BusinessEntityID] = [e].[BusinessEntityID]
               WHERE [e].[BusinessEntityID] = @iBusinessEntityID;
        RETURN;
    END;

--TEST PERFORMANCE
SELECT 
    *
FROM [dbo].[atest1](5);
GO
SELECT 
    [e].[BusinessEntityID]
  , [e].[NationalIDNumber]
  , [e].[JobTitle]
FROM [HumanResources].[Employee] [e]
INNER JOIN [Person].[Person] [p]
     ON [p].[BusinessEntityID] = [e].[BusinessEntityID]
WHERE [e].[BusinessEntityID] = 5;
Run Code Online (Sandbox Code Playgroud)

sql-server user-defined-functions inline-functions table-functions

4
推荐指数
1
解决办法
86
查看次数

"#define"和内联行为是否相同?

我在我的一个标题中有一些简短的定义,如下所示:

#define ROUND_DOWN(a,b)   (a)-(a)%(b)
Run Code Online (Sandbox Code Playgroud)

例如

ROUND_DOWN(178,32) = 160
Run Code Online (Sandbox Code Playgroud)

但是,如果我把它传递给它:

ROUND_DOWN(160*2, 32);
Run Code Online (Sandbox Code Playgroud)

然后它像这样编译?

(160*2)-(160*2)%(32), 
Run Code Online (Sandbox Code Playgroud)

这只是处理160*2两次..

我想知道内联函数是否以相同的方式运行?例如

inline int RoundDown(int a, int b)
{
return (a)-(a)%(b)
}
Run Code Online (Sandbox Code Playgroud)

将160*2作为320存储在"int a"中,然后计算会起作用,还是它的行为与定义相同?

一个更好的例子是:

RoundDown((x+x2)*zoom, tile_width);
Run Code Online (Sandbox Code Playgroud)

c c++ inline-functions c-preprocessor

3
推荐指数
2
解决办法
426
查看次数

内联函数原型与常规声明与原型

内联函数和main之间有什么区别,如下所示:

inline double cube(double side)
{
   return side * side * side;
}

int main( )
{
    cube(5);
}
Run Code Online (Sandbox Code Playgroud)

vs只是定期声明一个函数:

double cube(double side)
{
   return side * side * side;
}

int main( )
{
    cube(5);
}
Run Code Online (Sandbox Code Playgroud)

vs功能原型?

double cube(double);

int main( )
{
    cube(5);
}

double cube(double side)
{
   return side * side * side;
}
Run Code Online (Sandbox Code Playgroud)

c++ inline-functions function-prototypes function-declaration

3
推荐指数
1
解决办法
4567
查看次数

内联函数/方法

声明:"必须在调用内联函数之前定义它们."

这个陈述是否正确?

[编辑]

问题最初是德语:
Inline-Funktionenmüssenvorihrem Aufruf definiert sein.

也许它可以帮助任何人......

c++ inline-functions

3
推荐指数
1
解决办法
281
查看次数

Matlab内联VS匿名函数

是否有充分的理由在MATLAB中使用内联函数与匿名函数之间进行选择?这里已经提出并回答这个确切的问题,但答案对新手MATLAB用户没有帮助,因为代码片段不完整,所以当粘贴到MATLAB命令窗口时它们不会运行.有人可以提供可以粘贴到MATLAB的代码片段的答案吗?

matlab anonymous-function inline-functions

3
推荐指数
1
解决办法
6261
查看次数

为什么C++内联函数有调用指令?

我读到内联函数,在进行函数调用时,我们用函数定义的主体替换函数调用.

根据以上说明,用户何时不应该有任何函数调用inline.

如果是这种情况为什么我call在汇编代码中看到三条指令?

#include <iostream>                                                                  

inline int add(int x, int y)                                                         
{                                                                                    
        return x+ y;                                                                 
}                                                                                    

int main()                                                                           
{                                                                                    
        add(8,9);                                                                    
        add(20,10);                                                                  
        add(100,233);                                                                
}

meow@vikkyhacks ~/Arena/c/temp $ g++ -c a.cpp
meow@vikkyhacks ~/Arena/c/temp $ objdump -M intel -d a.o
0000000000000000 <main>:
   0:   55                      push   rbp
   1:   48 89 e5                mov    rbp,rsp
   4:   be 09 00 00 00          mov    esi,0x9
   9:   bf 08 00 00 00          mov    edi,0x8
   e:   e8 00 00 00 00          call   13 <main+0x13>
  13: …
Run Code Online (Sandbox Code Playgroud)

c++ assembly inlining inline-functions

3
推荐指数
1
解决办法
842
查看次数

类中定义的函数是否总是内联的?

根据一些书,类中定义的函数(连同标题中的定义)始终是内联的。真的吗?

我们如何使用测试应用程序创建这样的场景?

c++ inline-functions

3
推荐指数
1
解决办法
872
查看次数

C++ - 当无法进行函数内联时?

伙计们,

我正在阅读" 用C++思考"(Chap - Inline函数),在那里我遇到了这个语句.

"如果隐式或明确地采用函数的地址,编译器也无法执行内联".

这是什么意思" taking address of function implicitly or explicitly"?
为什么在这种情况下无法内联?

谢谢.

c++ inline-functions object-address

2
推荐指数
1
解决办法
243
查看次数

内联函数链接错误 C++

考虑以下代码:

在 header.h 中

#pragma once

class someClass
{
public:
    void foo();
};
Run Code Online (Sandbox Code Playgroud)

在头文件.cpp中

#include "header.h"

inline void someClass::foo(){}
Run Code Online (Sandbox Code Playgroud)

在main.cpp中

#include <iostream>
#include "header.h"
using namespace std;

int main()
{
    someClass obj;
    obj.foo();
}
Run Code Online (Sandbox Code Playgroud)

这里我得到一个链接错误,因为 foo 函数在 header.cpp 中被定义为内联,如果我删除 'inline' 关键字,编译和运行将继续没有错误。

请告诉我为什么这个“内联”函数出现链接错误?

c++ inline-functions linkage

2
推荐指数
1
解决办法
1453
查看次数