extern的使用

一:背景

在 CLR 源码中有很多的 extern 和 extern "C" 这样的关键词,比如下面这些代码:


extern size_t gc_global_mechanisms[MAX_GLOBAL_GC_MECHANISMS_COUNT];

extern DWORD g_dwHandles;

// The single GC heap instance, shared with the VM.
extern IGCHeapInternal* g_theGCHeap;

extern PTR_VOID GetUnwindDataBlob(TADDR moduleBase, PTR_RUNTIME_FUNCTION pRuntimeFunction, /* out */ SIZE_T * pSize);

extern "C" uint32_t* g_gc_card_table;
extern "C" uint8_t* g_gc_lowest_address;

extern "C"
{
    uint8_t *g_gc_sw_ww_table = nullptr;
    bool g_gc_sw_ww_enabled_for_gc_heap = false;
}

那这些都是什么意思呢? 为了更好的学习 CLR,这些还是要简单了解一下的。

一:extern

1. 变量定义和变量引用

在 C# 中并没有听说过有 extern 这种概念,其实变量可以有两种方式存在。

  1. 变量定义

  2. 变量引用

变量定义概念很简单,定义就得给它分配内存空间,比如下面这样

你可能感兴趣的:(最高笔记,笔记,c++,jvm,开发语言)