본문 바로가기

프로그래밍

(357)
[CPP] 포인터인자와 레퍼런스인자 함수 생성 asm 비교. 함수의 인자를 레퍼런스로 주었을 때와 포인터로 주었을 때, 생성되는 asm 코드는 어떻게 다를 지 궁금했다.매우 간단한 함수를 만들고, VS2008 에서 최적화 없이 asm 코드를 생성하여 비교하였다. 1. 소스 f1 은 레퍼런스도 포인터도 사용하지 않은 기본형을 그대로 인자로 준 함수. f2 는 모든 인자를 포인터로 넘긴 것, f3 은 레퍼런스로 인자를 넘긴 것이다. f2, f3 이 asm 으로 어떻게 해석되어 생성될 지 궁금했는데, 왼쪽이 f2 의 호출부분 (==== 바 위쪽) 과 f2 의 몸체. 오른쪽이 f3 의 호출부분과 몸체이다. asm 을 소스와 함께 생성했기 때문에, 비교하기 편리하고, 잘 살펴보면, 노랗게 다르다고 표시된 부분은 모두 원 소스 부분 뿐이다. 생성된 asm 코드 자체는 (호출..
우분투에서 ChaiScript 샘플 빌드하면서 만난 문제 compling chaiscript samples on ubuntu apt-get install eclipse-cdt : if menu is hidden, modify /usr/share/applications/eclipse.desktop Exec=env UBUNTU_MENUPROXY= eclipsechaiscript .deb download and install : under usr/include chaiscript folder is createdmake a cpp projectproject preference gcc compile option --std=c++11gcc linke option --ldl (-l dl 추가)if built binary doesn't work. #include chaisc..
twisted counter 연습문제 http://krondo.com/?p=1333 여기에서 제시한 연습문제를 풀어봤다. 왠지 깔끔하지 않아보이는 코드이지만 남겨본다. class Countdown(object): MARKER_REF = '~!@#$%^&*()`,/+_|:;' # a counter is # c[0] : initial value # c[1] : count function counters = [ ] def add_counter(self, c, d): M = self.MARKER_REF marker_string = M[c%len(M)]*3 + M[d%len(M)]*3 idx = len(self.counters) def count(): if sum(map(lambda x : x[0], self.counters)) == 0: react..
[PYTHON|PANDAS] pandas.read_csv MemoryError 문제 대략 아래와 같은 코드로 3기가 짜리 csv 파일을 pandas.read_csv 로 읽으려 했다. import pandas as pddf = pd.read_csv('big_dataset.csv') 아래와 같이 MemoryError 를 발생하며 성공하지 못했다. return pd.read_csv(train_path) File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 470, in parser_f return _read(filepath_or_buffer, kwds) File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 256, in _read return parser.read() Fi..
알파벳 순서인 A - E 로 이루어진 문자열 5개의 단어로 경우의 수를 만들려고 합니다.A,B,C,D,E경우의 수는 아래와 같은 형식의 값들을 다 뽑아 내야 하는데요. 이것을 로직화가 가능할까요.도와주세요AABACADAEABCABDABEACDACEADEABCDABCEABDEABCDEBBCBDBEBCDBCEBDEBCDECCDCECDEDDEE------------------------------------------------------def int2str(n): s0 = [ 'A', 'B', 'C', 'D', 'E' ] s = '' for i in range(5): if n&(1
front end allocator / back end allocator 최근 힙을 망가뜨리는 버그를 처리해야 했다. 그래서 힙에 대해 이런 저런 책을 찾아 보면서 공부를 좀 했는데, 이해가 안 되는 부분이 있었다. 실전 윈도우 디버깅 (advanced windows debugging) 을 보면, 힙의 구조에 대해 설명하면서 매우 비슷한 리스트인 front end allocator 와 back end allocator 에 대해 설명한다. 책에서의 설명에서는 둘 다 특정 크기의 배열을 가지고 있고, 각 배열은 대략 특정 크기의 사용이 해제된 메모리 블록 리스트의 헤더를 가지고 있다. 이런 식으로 메모리 블록을 관리하다가, 다시 할당 요구가 오면 다시 내어주고 하는 데 이 두 구조가 쓰이는 것 같다. 그런데, 이 둘은 매우 비슷하면서도 아주 살짝씩 다르다.두 가지의 설명이 매우 ..
유사진법표기 엑셀컬럼 알파벳식 숫자표기법 http://synapsoft.co.kr/jsp/recruit/13_apply.html 10진법 표기법은 다음과 같다. N = a_n x 10^n + ... + a_1 x 10^1 + a_0 x 10^0 , a_i ∈ { 0 , ..., 9 }이 표기법으로는 0 이상의 모든 수를 표현할 수 있으며, 표기법은 유일하다. 이 표기법을 살짝 바꾼 표기법을 만들어 보면, N = a_n x 10^n + ... + a_1 x 10^1 + a_0 x 10^0 , a_i ∈ { 一 , ..., 九, 十 }이 표기법으로는 1 이상의 모든 수를 표현할 수 있으며 ( 0은 표기하지 못한다. ), 표기법은 유일하다. 심볼을 10개가 아닌 알파벳 대문자를 이용하면 26진법과 유사하게 26의 거듭제곱의 합으로 표현되는 표기법이 ..
stack overflow 메모리 탐구. stack overflow 가 날 때 실제 메모리 주소를 찍어 보고, 그 값을 vmmap 툴과 비교해 봤다. 재귀함수(recursive fuction)를 배울 때 가장 많이 듣는 유의점이, 재귀함수는 stack overflow 를 유발할 수 있기 때문에 주의하라라는 말이다. 재귀함수를 이용하여 문제를 발생시켰다.재귀함수 내부에 지역변수를 하나 생성하였고, 그 지역변수의 주소를 찍었다. sysinternals 의 vmmap 툴은 프로세스를 선택하면 해당 프로세스의 메모리 공간의 각 부분이 어떤 영역으로 잡히는 지를 보여준다. 우리의 관심사는 stack 이고, stack은 0x00030000 ~ 0x00130000 영역에 잡혀있다. 첫번째 그림에서 찍힌 첫번째 r의 주소는 0x12ff48 스택 중에서도 윗부..