2021年3月27日 星期六

Calling Convention in LLVM

Photo by Pavan Trikutam on Unsplash

Introduction

The calling convention is a specification which describes how parameters are passed to a function or how a return value is returned from a function. Different processor architectures may have different calling conventions. For example, in x86, function parameters would be put in the stack. In ARM, some of the function parameters would be put in the registers and the others would be put in the stack.

LLVM 是如何處理呼叫慣例(Calling Convention)

Photo by Quino Al on Unsplash

前言

所謂的呼叫慣例是指一個規範,這個規範描述了函式的參數如何傳遞、返回值式怎麼返回等等的議題。不同的處理器架構通常會有不同的呼叫慣例。比如: 在 x86 的架構中,函式的參數傳遞會以堆疊來完成。但在 Arm 的架構中,有一些參數會放在寄存器中,有一些參數則可能放在堆疊中。

2021年3月20日 星期六

[Effective C++] [閱讀心得]: 為何要使用前置宣告(Forward Declaration)

// A.h

class A { ... };

// B.h
#include "A.h"

class B {
...
private:
    A a;
...
};

上面這段程式碼中,由於 B 類別擁有 A 類別的成員變數,因此必須引入定義 A 類別的 A.h。然而,這樣做的缺點是,每當 A.h 內發生任何變動時,引入 B.h 的編譯單元也必須重新編譯。如果大型專案中存在著很多這樣的依賴關係的話,那麼專案的編譯時間就會變得很長。