본문 바로가기

C++3

C/C++ call by value, 포인터(call by reference), 메모리 접근 동작 방식 C/C++의 call by value, call by reference 포인터 = call by reference, 그 외 타입은 call by value 라고 그냥 외우는 경우들도 많은데, 이런 암기로는 C/C++ 언어의 특성과 동작 방식을 제대로 이해하기 힘들다고 생각합니다. 먼저 C언어의 변수가 가지고 있는 정보는 변수에 할당된 메모리의 첫번째 주소, 그리고 타입(type)이며 항상 모든 타입 변수에 대해 기본적으로 call by value로 동작하고 있습니다. 그리고 call by reference가 가능하도록 연산자를 제공할 뿐입니다. C언어의 call by value 변수가 의미하는 메모리 영역의 값을 그대로 가져옵니다. 예로 아래 예시의 var 변수는 첫주소 100000000와 long lo.. 2021. 10. 5.
C/C++ call by 포인터, 소멸자, 깊은 복사자가 필요한 이유, 메모리 누수에 대한 고찰 요즘 유행하는 대부분 언어들의 경우 프로그래밍을 할 때 메모리 누수의 고려를 줄이기 위해 특정 타입의 변수에 대해서는 강제로 call by reference 접근만 허용하며 언어의 자체 엔진이 메모리 관리를 합니다. ex) GC(Garbage Collection), Reference Counts 기법 등등 다만 C언어의 경우 변수간의 할당 작업은 구조체 일지라도 모두 call by value 방식이기에 구조체 내부에 포인터가 섞여 있는 경우 메모리 누수에 대해 신경쓸 부분이 많습니다. C/C++의 call by value, 포인터 메모리 동작 방식 https://asung123456.tistory.com/43 C/C++ call by value, 포인터(call by reference), 메모리 접근 동.. 2021. 10. 4.
Linux C/C++ shared library 컴파일하기 fPIC 옵션 GOT, PLT c++ g++ -shared -fPIC -o g++ -shared fPIC -o lib.so code.cpp c gcc -shared [-fPIC] -o gcc -shared [-fPIC] -o lib.so code.c -fPIC 생략가능 하지만 공유라이브러리를 만들 때는 -fPIC 옵션 사용을 권장합니다. (컴파일 종류에 따라서 -fPIC는 필수 옵션입니다.) fPIC를 사용하지 않을경우 재배치 기법을 사용하게 되는데, 간략하게 라이브러리의 주소를 현재 사용하려는 프로세스 주소에서 접근가능하게 재배치 한다는 개녑입니다. 단점은 1. 여러 프로세스가 공유라이버리를 공유하게되면 각 프로세스가 로드 할때마다 공유라이브러리의 text section(프로세스의 코드가 있는 영역)가 변해야하는데 이는 불가능하다... 2020. 2. 6.