[ 590p ~ 595p ] thread_local, volatile, mutable, const의 내부링크, 함수와 링크, 단일 정의 규칙
- thread_local
변수의 존속시간이 쓰레드의 존속 시간과 같다는 제한자
존속시간은 예를들어
정적 변수의 존속시간은 프로그램이 실행되고 종료될때까지이다
- volatile
volatile : 변덕스러운
변덕 : 이랬다저랬다 잘 변하는 태도나 성질
개념 : 간단히는 최적화를 수행하지 못하게 막는다, 라고 할수있고
자세히는 volatile 변수를 참조할때 레지스터에 로드 된 값을 사용하지 않고 항상 메모리를 직접 참조 한다
최적화를 왜 막아야하는가?
최적화로 인해서 생략된 코드때문에 개발자가 의도한대로 흘러가지 않는 경우도 있는 듯 하다
https://luna-archive.tistory.com/2
[C] 임베디드 시스템에서 volatile 키워드를 사용하는 이유
MCU 프로그래밍을 하다 보면 레지스터를 제어하기 위해 같은 주소에 여러번 값을 여러번 쓰는 경우가 빈번하고, 이런 경우 코드를 보면 앞에 volatile 키워드를 사용하는 경우를 볼 수 있다. 처음
luna-archive.tistory.com
https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=classic2u&logNo=50003118713&parentCategoryNo=&categoryNo=15&viewDate=&isShowPopularPosts=false&from=postView
이 두 글에 자세히 나와있다
최적화가 일어나지 않으므로 코드가 생략되지 않고 모두 직접 메모리에 실행되어 값이 변할수도 있기에
변덕스러운 이라는 뜻이 어울린다고 생각한다
일단 이 개념은 여기까지
- mutable
개념 : const 구조체 또는 const 클래스의 멤버지만 변경가능한 멤버변수를 선언할때 사용한다
- const의 내부링크
기본 전역 변수는 외부링크로 디폴트가 되어있다
하지만 const가 붙으면 내부링크로 변경된다
- 함수와 링크
함수역시 링크 속성을 가진다
모든 함수는 정적기억존속을 가진다.(프로그램의 시작과 끝까지) = 외부링크
static을 사용하여 내부링크를 부여 할 수 있다
- 단일 정의 규칙
프로그램은 인라인이 아닌 모든 함수에 대해서 정확히 하나의 정의만을 가져야한다