__attribute__ 속성은 gcc 에 컴파일을 더 유연하게 만들어주는 속성이라고 한다.
ELF의 symbol visibility 속성은 dynamic linker의 symbol resolution을 도와주는 역할을 한다.
간단히 말하면, 외부로 공개된 전역 심볼들을 찾을 때 특정 심볼을 제외시키거나 먼저 찾도록 지정할 수 있다.
공유 라이브러리 구현 시 이러한 기능을 잘 활용하면 좀 더 좋은 성능을 얻을 수 있다.
visibility 속성은 다음과 같은 4가지 중의 하나로 설정할 수 있다.
- default: 기본값이다. visibility는 고려하지 않고 해당 심볼(의 바인딩)이 global인지 static(local)인지 만을 이용한다.
- hidden: 주로 사용되는 속성이다. 해당 심볼을 외부로 공개하지 않게 만든다.
- protected: 잘 사용되지 않는다. 해당 심볼은 공개하지만 다른 모듈에 의해 대체되지 않는다.
- internal: 잘 사용되지 않는다. 해당 심볼을 공개하지 않으며 각 아키텍처 별로 약간씩 다른 효과를 가질 수 있다.
참고 링크 : http://egloos.zum.com/studyfoss/v/5257309