목록Software Engineering (79)
Pure Software Engineer :)
new operator는 사용자가 overriding 해서 사용할 수 있다. 하지만 new.cpp에 보니 함수가 다음과 같은 형태로 되어있었다. 123void * operator new(size_t cb) { ...} 그럼 저기서 size_t는 어디서 온다는 말일까? 보통 new 를 사용할 때 보면 다음과 같이 사용하는데... 1int * a = new int; 찾아보니...한가지 잊었던 점이 있었다. new는 함수가 아니라 operator 였단걸!! 결국 new operator 가 하는 일은 2가지로 볼 수 있는데.1. 타입을 알아내서(sizeof(t) 를 통해) operator new 함수 호출.2. 해당 객체의 생성자 호출. 그렇기 때문에 operator new 함수의 첫번째 매개변수는 size_t..
먼저 본 항목에 들어가기 앞서, C++은 자바와 닷넷과는 다르게 메모리를 직접 관리해야 한다. 수동으로!! 하지만 반대로 생각해보면 개발자가 메모리를 잘(?) 컨트롤 할수만 있다면, 가비지 컬렉터를 통해 메모리 관리에 신경쓰지 않아도 되는 언어와 달리 성능(시간, 공간) 향상을 누릴 수가 있다. C++의 메모리를 직접 관리하기 위해서는 C++에서 메모리 관리 루틴이 어떻게 동작하는지를 잘 알아둘 필요가 있으며, 그에 대한 내용을 이번항목에서 설명하고 있다. [항목49] new 처리자의 동작 원리를 제대로 이해하자 C++에서는 흔히 operator new 연산자를 통해 메모리 할당을 요청한다. 하지만 메모리 할당에 실패하였을 경우에는? 1 2 3 4 5 6 7 8 9 10 11 12 #include #in..
스콧 마이어스의 Effective C++ 3판을 읽으면서 조금씩 정리를 해 보고자 한다. 책은 대학교때 구입했던거같은데...벌써 한 4~5년은 된것 같다 ㅠㅠ 최근 책을 읽어보다가 C++ 에 대해 지금까지 전혀 예상치 못하고 넘어갔던 재미있는것들도 많이 보여 충격을 받았다. 책의 특성상 특별히 순서에 관계없이 읽어도 되므로...블로그 정리도 재미있었던 부분(?) 부터 조금씩 정리하겠다고 마음먹었다. 언제가 될지 모르지만 책에 있는 모든 항목들을 정리할 수 있는 그날까지 열심히 해보자.!!!!
VS 2008로 디버깅을 하는도중 watch에 값이 안나오고 CXX0017: Error: symbol not found 로 고생을 했었다. 어떤 변수는 값이 안나오고 어떤 변수는 값이 이상해서 심지어 디버거에서 예를들어 a = 0 이라고 분명 나오는데 if(a==0) return 문장이 그냥 통과해버리기까지 하는 경우를 디버깅중에 발견하였다. 문제는 프로젝트의 optimization 옵션이 걸려있어서 그랬던 것이다. 다음을 반드시 확인하도록 하자!! Project 속성 -> Configuration Properties -> C/C++ -> Optimization - Optimization: Disabled (/Od) 또한 이는 해당 프로젝트 뿐만아니라 그 프로젝트가 사용하는 프로젝트(라이브러리) 역시 빌..
MSSQL Server 2008 설치후 서비스모드로 실행을 시켜줘야 한다. $ net start MSSQLSERVER 이렇게 하면 기본 인스턴스인 경우 실행이 되는데, 추가적으로 인스턴스를 생성한 경우에는 다음과 같이 한다. $ net start MSSQL$(인스턴스명) (예. $ net start MSSQL$ten) 또한, 서비스 모드로 실행하기 위해서는 관리자권한이 있어야 하므로, 반드시 콘솔을 실행시킬때 관리자 권한으로 실행한다. reference http://msdn.microsoft.com/ko-kr/library/ms187598(v=sql.105).aspx
dir 을 통해 두 폴더안에 있는 파일 목록이 바뀐게 있는지 확인하고 싶을때 diff를 쓰면 된다. 하지만 기본적으로 dir 명령어는 파일 생성시간 까지 함께 나오므로 파일 목록만 뽑아낼 필요가 있다. 이럴땐 다음과 같이 한다. $ dir /b > result 윈도우에서 어떠한 폴더를 어떤이름으로 공유폴더로 지정했는지 확인하기 위해 $ fsmgmt.msc (참고. 공유폴더 이름에 $가 붙어 있는 경우 '관리목적 공유폴더' 라는 특수한 공유폴더라고 한다.) 비주얼튜디오와 vim을 연동하고 싶을때 http://vim.wikia.com/wiki/Integrate_gvim_with_Visual_Studio
// GVIM에서 글자 폰트 저장하는방법 :set guifont=Lucida_console:h10 이런형태 인데 = 뒤에 무슨말써야할 지 모르겠다면 우선 편집 메뉴에서 글꼴이랑 크기 같은거 고른 후 :set guifont= 까지 적은후 tab을 누르면 현재의 설정이 자동완성된다. 이를 _vimrc에 적어주면 된다. (e.g. set guifont=Consolas:h12:cANSI // vi 에서 CTRL+V 가 visual block 으로 많이 사용하는데 // 윈도우 환경에서는 CTRL+V는 붙여넣기가 되어 먹히질 않는다. // 방법 1 : 윈도우 vim에서는 이를 위해 CTRL+Q를 사용하면 된다.!! // 방법 2 : vim73 디렉토리에 mswin.vim 파일에서 // map "+gP, cmap +..
Xen에서는 guest domain이 PCI 디바이스를 직접 사용할수 있도록 PCI passthrough 를 지원한다. 이를 사용하기 위해 커널 컴파일할때 모듈은 선택해줘야한다. dom0에서는 pci-backend 디바이스가 있어야 하며domU에서는 pci-frontend 디바이스가 있어야 한다. 이제 PCI passthrough를 사용해보자 먼저 dom0에서 domU에게 건내줄 디바이스 번호를 알아야 한다.$ lspci 를 통해 PCI 디바이스 목록을 볼수 있다.아래는 하나의 예이다. 0b:00.0 Power PC: Device eee0:fed0 (rev 01) passthrough하는 방법은 static, dynamic(xl, sysfs) 등 여러가지 방법이 있는데여기서는 dynamic assignm..