누군가 얘기한 ‘형님’들의 서적들…

Design Patterns : Elements of Reusable Object-oriented Software
The C++ Programming Language
Effective C++
More Effective C++
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices
C++ Standard Library : A Tutorial and Reference
Modern C++ Design
Effective STL
Efficient C++
Essential C++
Accelerated C++
Exceptional C++
More Exceptional C++
C++ Template Metaprogramming


 


음…


과연 이걸 읽어야 C++ 프로그래머라고 할 수 있나 하는 생각이 들 정도입니다.


사실 Design Patterns 과 같은 책은 프로그래밍 언어와는 무관하고


읽어서 도움 되긴 하죠…


 


아무래도 BS는 책보다는 몸과 손가락으로 익혀오던 습성이 있어서 ㅎㅎ


 

배열 초기화 방법 중 하나

보통은

memset(ptr, 0, sizeof(element_type) * element_count);

 

처럼 memset()이나 ZeroMemory() 와 같은 함수를 사용하는데요…

이렇게되 되네요

int a[100] = {0, };

C++ 표준 위원회 (C++ Standars Committee)에서 최신 draft 문서를 pdf로 공짜로 받을 수 있습니다.

거기에는 더욱 다양한 배열 및 STL 객체 초기화 방법을 제시하고 있고, 몇몇 부분은 상용 컴파일러에 적용되어 있습니다.

alloca – 유용한 메모리 할당 함수

Microsoft Visual C++

void* _alloca(size_t size);

 

Linux (GCC)

void* alloca(size_t size);

 

위 함수의 특징은 ‘stack에서 메모리를 할당 받는다‘ 입니다.

 

이 특징으로 인해

빠른 메모리 할당/해제가 가능하며, 메모리 해제를 직접 해주지 않아도 된다는 것

 

스택은 실제 미리 할당되어 있는 공간이고스택 포인터의 값이 변경될 뿐이라 메모리 할당에 소요되는 것을 줄일 수 있죠…스택 공간으로 충분히 사용할 수 있으나 그 크기가 가변이라서 new 또는 malloc() 등을 사용하는 경우라면alloca() 를 통해 약간의 성능 향상을 노릴 수 있습니다.

참고로 찾아보다보면 System에 따라서 조금씩 다른 구현으로 인해

Portable 한 소스를 작성할 때에는 주의하라고 되어 있더군요…

실제로 몇몇 소스들을 보면 system의 alloca()를 사용하지 않고 자체 구현하기도 하더군요.