当前位置: 首页 > news >正文

C++内联函数性能分析

C++内联函数性能分析

内联函数通过在调用点展开函数体来消除函数调用开销。理解内联机制和使用场景对于编写高性能代码至关重要。

inline关键字建议编译器内联函数。

#include
#include

inline int add(int a, int b) {
return a + b;
}

inline int multiply(int a, int b) {
return a * b;
}

void inline_basic() {
int result1 = add(10, 20);
int result2 = multiply(5, 6);
std::cout << "Results: " << result1 << ", " << result2 << "\n";
}

类内定义的成员函数自动成为内联函数。

class Point {
int x_, y_;

public:
Point(int x, int y) : x_(x), y_(y) {}

int x() const { return x_; }
int y() const { return y_; }

int distance_squared() const {
return x_ * x_ + y_ * y_;
}
};

void implicit_inline() {
Point p(3, 4);
std::cout << "Distance squared: " << p.distance_squared() << "\n";
}

constexpr函数隐式内联。

constexpr int factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}

void constexpr_inline() {
constexpr int result = factorial(5);
std::cout << "Factorial: " << result << "\n";
}

内联函数可以减少函数调用开销。

int regular_function(int x) {
return x * x;
}

inline int inline_function(int x) {
return x * x;
}

void performance_comparison() {
const int iterations = 10000000;

auto start = std::chrono::high_resolution_clock::now();
volatile int result = 0;
for (int i = 0; i < iterations; ++i) {
result = regular_function(i);
}
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast(end - start);
std::cout << "Regular function: " << duration.count() << " ms\n";

start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < iterations; ++i) {
result = inline_function(i);
}
end = std::chrono::high_resolution_clock::now();
duration = std::chrono::duration_cast(end - start);
std::cout << "Inline function: " << duration.count() << " ms\n";
}

过度内联会增加代码大小。

inline void large_function() {
for (int i = 0; i < 100; ++i) {
std::cout << i << " ";
}
std::cout << "\n";
}

编译器可以忽略inline建议。

inline void complex_function(int n) {
if (n > 0) {
complex_function(n - 1);
}
}

__attribute__((always_inline))强制内联。

__attribute__((always_inline)) inline int force_inline(int x) {
return x * x;
}

__attribute__((noinline))禁止内联。

__attribute__((noinline)) int no_inline(int x) {
return x * x;
}

内联函数必须在头文件中定义。

template
inline T max_value(T a, T b) {
return a > b ? a : b;
}

内联是优化的重要手段,但应该根据函数大小和调用频率合理使用。

http://www.jsqmd.com/news/862744/

相关文章:

  • 2026最新诚信优选 上海市宝山区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 2026最新诚信优选 重庆市南岸区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 【JUC】线程池
  • [Unity实战] Shader 学了很多却提不动项目性能?问题往往出在没把渲染知识接回场景优化
  • 2026最新诚信优选 重庆市万州区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan搭建保姆教程
  • 2026最新诚信优选 重庆市武隆区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 2026最新诚信优选 临汾市尧都区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • okbiye 双降神器:把论文重复率 + AIGC 率 “一键清零”,毕业季再也不用慌
  • C++内存对齐与布局优化
  • 2026最新诚信优选 重庆市南川区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 2026最新诚信优选 上海市崇明区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 2026最新诚信优选 重庆市永川区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 【AI入门知识点】Skills 是什么?终于有人把 Skills、Function Calling、MCP 讲明白了
  • 一键营造立体感!OBS“半透明滤镜”上线,让直播间层次分明
  • 2026最新诚信优选 重庆市綦江区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 2026最新诚信优选 吕梁市离石区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 论文降重 + 消 AIGC 双难题?用 okbiye,我帮室友一周搞定毕业查重危机
  • TCP拥塞控制详解
  • 2026最新诚信优选 重庆市渝北区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • [网鼎杯 2020 朱雀组]Nmap-保姆级讲解
  • 《数据挖掘(主编:吕欣 王梦宁)》读书笔记:异常检测方法梳理与实践理解
  • 2026最新诚信优选 南京市高淳区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • 论文双检卡脖子?okbiye 降重 + 去 AIGC 双 buff,助你一键通关毕业审核
  • 计算机二级 WPS 文字题:样式调整考点 详细解析
  • Agent的“记忆”与“约束”工程---->Agent协作
  • 2026最新诚信优选 重庆市渝中区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收
  • RAG三大冲突与三大死穴及解决方案
  • HTTPS一文通
  • 2026最新诚信优选 南京市鼓楼区黄金回收白银回收铂金回收彩金回收门店TOP5排行榜+联系方式推荐_转自TXT - 盛世金银回收