代码与inline关键字的使用

来源:互联网 发布:js用cookie统计uv 编辑:程序博客网 时间:2024/06/13 11:48
在函数中(需要做一次)改变或更新代码的代码比每一个地方实例要容易得多。重复的代码是一个灾难的配方。
它使你的代码更容易阅读和理解,因为你不必知道一个函数是如何实现的,以了解它所做的。
函数提供类型检查。
然而,函数的一个主要缺点是,每次调用一个函数时,都会出现一定数量的性能开销。这是因为,该处理器必须存储当前指令的地址(所以它知道在哪里返回到以后)和其他寄存器,所有的函数参数必须被创建和分配的值,该程序必须分支到一个新的位置。代码写的地方是显着更快。
对于大型和/或执行复杂任务的函数,函数调用的开销通常与函数运行时所需的时间相比是微不足道的。然而,对于小的、常用的函数,使函数调用所需的时间往往比实际执行函数的代码所需的时间多得多。这可能会导致大量的性能损失。

C++提供了一种方法,结合功能的优势与写代码的速度:内联函数的地方。内联关键字用来请求编译器将您的函数作为内联函数来处理。当编译器编译您的代码时,所有内联函数都被扩展到位-也就是说,函数调用被替换为函数本身的内容的一个副本,它移除了函数调用的开销!缺点是,因为内联函数是在每个函数调用的地方扩展的,这可以使你的编译的代码相当多的一点,尤其是如果内联函数是长和/或有许多调用的内联函数。

这将执行得相当快,在编译后的代码的成本略大。
由于对代码膨胀的潜力,内联函数是最适合短的函数(如不超过几行),通常称为内部循环和不分。还请注意,内联关键字只是一个建议-编译器可以自由地忽略您的请求,以内联函数。这很可能是一个结果,如果你试图内联一个漫长的功能!
最后,现代的编译器都很擅长内联函数自动--比在大多数情况下,人类。即使你不标记一个函数作为内联,编译器将内联函数,它认为将导致性能增加。因此,在大多数情况下,没有一个特定的需要使用内联关键字。让编译器内联函数为你处理。
规则:要知道内联函数,但现代的编译器应该为您的内联函数为适当的,所以没有必要使用关键字。

页面加载实际上是一个操作系统的概念并没有C++本身。它的开销,来自操作系统本身由于内存的方式设置。
你的电脑上有一定数量的物理内存。这个内存需要保存正在运行的所有程序。然而,有时我们的程序想使用更多的内存比我们在机器上的物理内存的情况下!在旧的日子里,你可能会得到一个内存错误,你的程序不会运行,直到你释放了一些东西。然而,大多数现代操作系统使用一个称为虚拟存储器的系统。虚拟内存基本上是一种技术,它让操作系统分配更多的内存到程序比它实际上物理上有!
这件作品的方式是所有的物理内存在机器上被分为块称为网页。当一个程序被加载时,操作系统将加载到它需要的多个页面上。然而,如果我们用完了免费的页面,操作系统将通过临时写一些旧的页面到磁盘。这是一个交换驱动器是。然后,当那些旧的页面再次成为必要时,它将它们从磁盘中读取(并可能写出来的东西)
如果你已经运行了Windows XP(或Vista)512兆字节的RAM(或更少),你知道它会慢。为什么?因为操作系统是将自己的磁盘写入磁盘,并在所有的时间读取它们。
臃肿的程序往往会导致操作系统必须阅读和写出来更多的页面(因为各种原因)。由于写页面到磁盘是非常缓慢的,这是你想尽可能避免。

你可以,但编译器不仅会忽视内联请求你让它不想被内联,它也将内联函数没有标记为内联认为应该内联。因此,内联关键字只是一个提示,编译器可以自由地忽略或添加它所喜欢的。
因此,一般不需要内联函数自己。如果你优化你的代码,你可以尝试内联函数是否有性能的提高,但除此之外,其他一些边缘模糊的情况下,你最好不要弄乱你的代码与inline关键字的使用。

1 0
原创粉丝点击