목록펭귄's directory (180)
한땀한땀 정성들인 코딩
스택프레임에 대한약속 __cdecl : 표준 __stdcall : ret에서 스택포인터 복귀시켜줌. 가변인수 함수에서는 작동불가 ( 윈도우api,비쥬얼 베이직 ) __fastcall : 인수를 스택에 push하지 않고 edx,ecx 레지스터에 바로 저장, 빠름, 3번째 인수부터는 cdecl로 작동 사용방법 int __stdcall 함수명(){ }
코드 세그먼트 : 소스가 들어가는곳 데이터 세그먼트 : 전역변수, 상수 힙 : alloc 할당하는 구역 스택 : 인수, 함수복귀주소, 지역변수 push나 pop 할때 esp는 +-4로 증감한다. ( 32bit 환경 한정, 스택하나의 크기는 4byte) 어셈블리어_main push 인수call 함수 // push+jmp ( 복귀주소 push, eip에 함수주소 저장) _funcpush ebp // 전에 쓰던 함수주소 push mov ebp, esp //현재 스택 포인트 sub esp,지역변수크기 // 지역변수크기 만큼 스택포인터 감소 ( 확장 개념 )~함수 본체실행 mov esp, ebp //스택복귀pop ebpret //복귀
int printf(const char *format,...);대표적인 가변함수 void variableFunc(int num,...){va_list ap; //스택참조 포인터 변수 va_start(ap, num); //포인터 변수 초기화 ,num은 마지막 고정인수 -> 스택의 구조 참조 while( 모든 인수를 다 읽을때까지 ){va_arg(ap, 인수타입); }va_end(ap); //intel cpu에선 작동안함. } 가변인수 매크로
struct {멤버목록} 이름; typedef struct {멤버목록} 이름; 비트구조체 typedef struct{unsigned int a:1; //보통 unsigned로 선언, int형으로도 선언한다. unsigned int b:2;unsigned int c:1;} 구조체명; 공용체union{멤버목록 } 공용체명; //모든 멤버는 같은 값을 가진다. 가장 큰 sizeof를 리턴 struct {union{멤버목록 //이름없는 공용체. 빅엔디안, 리틀엔디안을 다같이 표현할때 많이쓰임. };} 열거형enum {EAST, WEST} mark; //각각 0과, mark상수
문자열 -> 정수 int atoi(const char *str); //10진수 정수로 변한 long atol(const char *str); //long형 long strtol(const char *nptr, null, int base); // base는 인식할 진수형태 long strtoul(const char *nptr, null, int base); //부호없는 unsigned
int puts(const char *str); //성공 0, 실패 -1(EOF) char* gets(const char *str) //입력받은 문자열 리턴, str배열에 ,실패시 null리턴 scanf는 공백을 못받으나 gets는 공백도 받는다.
int (*ptr)(int); //반환타입 (*함수포인터명)(매개변수타입) int func(int val); ptr = func; int (*ptr1)(int ,double *);double (*ptr2)(char); ptr1 = (int (*)(int, double *))ptr2; //형변환 (반환타입 *(매개변수)) typedef int (* NEW)(int); //타입지정자활용 atexit((*func)(void)); //함수포인터를 매개변수로 받음. 종료될때 함수호출
malloc calloc위 두 함수는 받는 인자만 다르지 비슷하다.void형 포인터를 반환하고int* a = (int *)malloc(사이즈-바이트단위) // 힙에 지정한크기만큼 메모리가 할당된다.int* b = (int *)calloc(크기, 갯수) // 크기*갯수 만큼 할당, malloc과는 다르게 할당받은 구역은 0으로 초기화 된다. void *realloc(void *p, size) //재할당
c언어 보충. 변수타입 static 타입 변수명;정적 변수 ( 전역변수와 차이점 : 접근영역이 다르다. 선언한 함수내 에서만 작동한다.) register int 변수명;메모리에 가장먼저 실린다. printf 출력포맷%d%u : 부호없는 10진수%x %X : 부호없는 16진수%p : 주소값%n : 주소값( int형만 ) printf("%10d",x); // 10자 출력printf("%.10d",x); // 소수점10자 출력 비트연산자& : and연산 ^ : or연산 ~ : not연산 ( 반전 ) int a = 16 int b = a>>1 //8 int c = a 오브젝트파일 .obj-> 링커 -> 실행파일 .exe 전처리기는 소스파일을 가공하는 일을 함 #include //stdio헤더에 있는 모든 소스코..
고급맵리듀스중 하나 join기법인데서로 다른( 포멧이 달라도 되고 ) input파일 두개를 받아서 key를 기준으로 value를 합치는 연산 맵퍼가 두개가 존재하고 리듀스가 두 파일을 key로 묶어준다고 보면된다. 여기까지가 hadoop hdfs상에서 쓰는 거고 hbase에서는Scan scan1 = new Scan(); scan1.setStartRow(start1); scan1.setStopRow(end1); Scan scan2 = new Scan(); scan2.setStartRow(start2); scan2.setStopRow(end2); MultiTableInputCollection mtic = new MultiTableInputCollection(); mtic.Add(tableName1, scan..