목록분류 전체보기 (91)
정체불명의 모모
thread가 C++ 11에서 직접 지원하면서 동기화를 위한 std::mutext가 추가되었습니다. mutex : 스레드로 동시에 여러 개를 처리할 때 모든 스레드가 접근하는 데이터를 하나의 스레드가 먼저 사용할 수 있도록 독점적으로 자원을 가져다 사용할 수 있도록 해주는 방법 입니다. 스레드를 10개를 생성하고 스레드로 실행시키는 함수인 increase_value() 함수에서 전역 변수 value를 하나씩 증가시키고 하나씩 출력합니다. 이 때 뮤텍스를 이용하여 동기화합니다. 위의 코드를 뮤텍스를 이용해서 동기화를 하면 정상적인 결과값이 나옵니다. 1, 2, 3, 4, 5, 6, 7, 8 ,9 , 10 ※ mutex를 지운 후 컴파일 하면 개판 오분전의 결과 값이 나온다. 멀티 쓰레드 무섭다... ㅎㄷ ..
Placement new 책을 보다 처음 보는 'placement new' 라는 것이 나왔다. 그냥 지나칠 수 있지만... 그냥 지나칠 수 없었다... 그럼.. 이제 파해쳐 보자!!! 참고한 링크는 아래에 달아 놓았습니다. new 연산자는 기본적으로 C의 malloc 과 달리 메모리 할당 + 초기화를 수행 한다. - 메모리 할당 : 해당 클래스 타입의 인스턴스를 저장할 공간을 할당 받는 것 입니다. - 초기화 : 생성자를 호출함으로써 할당받은 메모리 공간에 인스턴스를 생성 및 초기화 합니다. c++에서는 new의 이 두 과정을 분리하여 다룰 수 있다. ▽ placement new 기능 : 이 기능은 새롭게 힙 영역의 메모리를 가져다 쓰는 것이 아니라, 내가 사용하길 원하는 메모리 공간을 지정할 수 있다...
c++ 표준 allocator에 대해 알아보겠습니다. 커스텀 allocator를 알아보기 전에 표준에 대해 더 자세히 알아갈 필요가 있다고 느꼈습니다. ㅁ allocator : 일반적으로 c++에서 메모리를 동적으로 할당하고 해제 할 때 new / delete 연산자를 사용하는데 allocator클래스는 주로 라이브러리 작성할 때, 특히 표준 라이브러리의 컨테이너를 구현할 때 많이 사용 됩니다. 할당자는 *fine-grained(정확한 개념은 모르겠습니다.) 방식 즉, 메모리 관리를 좀 더 세밀하게 컨트롤 해야 하고 유연하고 효율적으로 사용해야 할 경우에 유저가 원하는 메모리 할당 방식으로 구현할 수 있습니다. allocator 클래스를 상속받아 멤버 함수를 override 해서 커스텀 할 수 있습니다...
1 - 6 : C++ 컴파일러의 어이없는 분석 결과를 조심하자 상황 : int 데이터가 들어 있는 파일을 list에 복사한다. ifstream dataFile("ints.dat"); list data(istream_iterator(dataFile),// 미리 경고입니다! 이 코드는 제대로 작동하지 istream_iterator());// 않습니다. 매개 변수를 둘러싼 괄호는 무시 되어도 무방한 것이지만, 그냥 괄호는 함수의 매개변수 리스트가 있음을 나타내는 것입니다. 즉, 이 그자체가 함수의 포인터임을 알리는 것 입니다. ifstream dataFile("ints.dat"); list data(istream_iterator(dataFile),// 미리 경고입니다! 이 코드는 제대로 작동하지 istream..