static const in C++
terminology
- Translation Unit
- ์ปดํ์ผ๋ฌ๋ ๋ฒ์ญ์ ๋จ์๋ณ๋ก ์คํํ๋๋ฐ, ์ด๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ฌธ์ฅ์ ๋ฒ์ญํ๋ ๋จ์๋ฅผ Translation Unit๋ผ ํ๋ค
- ๋ชจ๋์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค
- Static linkage
- ์ด๋ ํด๋น ๋ชจ๋ ์์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค
- Extenal linkage
- ๋ค๋ฅธ ๋ชจ๋์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค
namespace์์์ static
static const int sci = 0; // sci is explicitly static
const int ci = 1; // ci is implicitly static
extern const int eci = 2; // eci is explicitly extern
extern int ei = 3; // ei is explicitly extern
int i = 4; // i is implicitly extern
static int si = 5; // si is explicitly static
- ์์ ์ ์ญ๋ณ์๋ค์ ํ์
์ ์ฃผ์๊ณผ ๊ฐ๋ค
- C++ namespace์์ const์ default๋ static์ด๋ค
- ๋ ๋ค ์ปดํ์ผ ํ์์ ์ด๊ธฐํ๋๋ฉฐ, const-initilaize ํน์ zero-initialize๋ฅผ ์ํํ๋ค
- ๊ฐ๊ฐ Data segment์ BSS๋ก ๋๋๋ค
static const in C#
public static const string CONST_NAME = "blah";
- ์์ ์ฝ๋๋ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค
- C#์์์ const๋ ๊ธฐ๋ณธ์ ์ผ๋ก static์ด๋ค
- ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , const์ static ํค์๋๋ฅผ ์ถ๊ฐํ ์๋ ์๋ค
C++๊ณผ์ ์ฐจ์ด์ ?
- static์ read/write ๊ฐ๋ฅํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๊ณ ๋ฐํ์์ ์ด๊ธฐํ๋์ด์ผ ํ๋ค
- ํด๋น static ๋ณ์์ ์ ๊ทผํ๊ธฐ ์ ๊น์ง ์ ์ ์์ฑ์๋ ํธ์ถํ์ง ์๋๋ค
- static ๋ณ์๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ Heap์ด๋ค
- const๋ ๊ฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ณ (๋๊ฐ) ์ปดํ์ผ ํ์์ ์ด๊ธฐํ๋๋ค
๊ทธ๋์ const ๋ณ์๊ฐ Heap์ ์์ฑ๋๋?
- ์ปดํ์ผ ํ์์ ๊ณง์ฅ ์์ฑ ์ฝ๋์ ์๋ฒ ๋ ๋๋ฉฐ, ๋ฐํ์์ ์ด๋ฅผ ์ํ ๋ณ์๊ฐ ํ์ํ์ง ์๋ค
- https://stackoverflow.com/questions/54105028/where-does-the-memory-is-allocated-for-static-constant-and-readonly-fields
- static ์ผ๋ก ๋ถ๋ฅ๋๋, Heap์ ์ ์ฅ๋์ง๋ ์๋ ๊ฒ ๊ฐ๋ค
์ถ์ฒ