inline

inline

内聯函數
inline是C++關鍵字,在函數聲明或定義中,函數返回類型前加上關鍵字inline,即可以把函數指定為内聯函數。這樣可以解決一些頻繁調用的函數大量消耗棧空間(棧内存)的問題。關鍵字inline必須與函數定義放在一起才能使函數成為内聯函數,僅僅将inline放在函數聲明前面不起任何作用。inline是一種“用于實現”的關鍵字,而不是一種“用于聲明”的關鍵字。[1]
    中文名: 外文名:inline 别名: 背景:inline關鍵字用來定義一個類 宏定義:define ExpressionName 取代:宏定義在形式上類似于一個函數

使用方法

簡單提一下inline 的使用吧:

1.在類中定義這種函數:

class ClassName{

.....

....

INT GetWidth(){return m_lPicWidth;}; // 如果在類中直接定義,不需要用inline修飾,編譯器自動化為内聯函數

.... //此說法在《C++ Primer》中提及

....

}

2.在類外定義前加inline關鍵字:

class Account {

public:

Account(double initial_balance) { balance = initial_balance; } //與1相同

double GetBalance(); //在類中聲明

double Deposit( double Amount );

double Withdraw( double Amount );

private:

double balance;

};

inline double Account::GetBalance() { return balance; } //在類外定義時添加inline關鍵字

inline double Account::Deposit( double Amount ) { return ( balance += Amount ); }

inline double Account::Withdraw( double Amount ) { return ( balance -= Amount ); }

此外還有一些規則需注意:

1、inline說明對編譯器來說隻是一種建議,編譯器可以選擇忽略這個建議。比如,你将一個長達1000多行的函數指定為inline,編譯器就會忽略這個inline,将這個函數還原成普通函數。

2、在調用内聯函數時,要保證内聯函數的定義讓編譯器"看"到,也就是說内聯函數的定義要在頭文件中,這與通常的函數定義不一樣。但如果你習慣将函數定義放在CPP文件中,或者想讓頭文件更簡潔一點,可這樣做:

//SomeInline.h中

#ifndef SOMEINLINE_H

#define SOMEINLINE_H

inline Type Example(void);

//........其他函數的聲明

#include“SomeInlie.cpp” //源文件後綴名随編譯器而定

#endif

//SomeInline.cpp中

#include"SomeInline.h"

Type Example(void)

{

//..........

}

//...............其他函數的定義

以上方法是通用、有效的,可放心使用,不必擔心在頭文件包含CPP文件會導緻編譯錯誤。

CSS

display:inline

它可以讓行内顯示為塊的元素,變為行内顯示,例如

DIV1

DIV2

這裡DIV1和DIV2分别占一行,但是你給他們加上屬性後變了

DIV1 DIV2

DIV1和DIV2這時候顯示在同一行了,試試看吧

和 display:inline 對應的是 display:block,block 會讓應用了該 CSS 屬性的 HTML 标記變成塊級别元素,例如 SPAN 是行内顯示的,但是你加了 display:block 屬性就不一樣了

[font style= "display:block "] SPAN1 [/font]

[font style= "display:block "] SPAN2 [/font]

block一般一個塊占一行,除非float

inline是自動排為一行,就象段内的文字一樣,可成為多行。

display:inline比較經典的用法是用在下的

display:inline 對應不顯示為 display:none

display:block 對應不顯示為 hidden

說通俗點 樣式為none的元素不占位置,而樣式為hidden的元素雖然不顯示但還是占地方

InLinehook

字面含義

從字面上來理解,inline hook即内置hook,内部跳轉hook,從内部聯結到其它函數的hook。

指直接修改目标函數的指令,用一個跳轉或者其他指令來達到挂鈎(執行自寫的其他函數)的目的。

這是相對一般的函數地址hook來說,一般的hook方法是指是在調用函數處修改函數地址,而不是在原來的函數體裡面做修改。如:CALL 0x10000001 改成 CALL 0x10000002

還有就是函數地址列表hook。在程序的不同層面有不同的函數地址清單,如應用層的IAT表,驅動層的SSDT和IDT表,此即在上述函數地址清單中修改函數地址。函數在應用層的IAT表地址如同函數的含糊地址,如X小區,驅動層的如詳細地址,如X棟X室,驅動的保護就如同小區保安起到保護作用。

比喻

如果把一個程序比作一本書,那麼:

inline hook如同修改内頁内容,寫上(由此處跳轉到XXX頁),位置在開始的叫淺層inline hook,靠後的則為深層inline hook。

SSDT hook、IDT hook和IAT hook如同修改目錄中章節的地址,把XXX節 xxx頁改為yyy頁。

比較

一般來說,改地址的hook,其使用時比較穩定。 inline hook 更加高級一點,一般也跟難以被發現。

inline:内置,在線的,聯機的

上一篇:房地産營銷策劃方案

下一篇:太虛幻境

相關詞條

相關搜索

其它詞條