전체 글

· JVM
자주 헷갈릴 수 있는 개념이라 표로 정리해둔다. Element Overriding Overloading Declaration Sub Class equivalent Class Relationship Parent - Child Class (Inheritance) equivalent Goal same method name but specially optimized at sub class same method name and Polymorphism(ex. different parameter type -> different return type) Condition Same Parameter type, the number of parameter Different Parameter (number, type..) Bi..
· C/C++
마법의 키워드 template 를 알아보자 이놈이 있기 전까지 우린 항상 int arr[n] type을 지정했다 그리고 매번 STL의 vector, list등을 사용할 때 vector 에서 이 꺽새 안에 들어가는 datatype을 왜 명시하는 것이었나? [구문] template class Class_Name { } 이 마법의 구문을 클래스 상단에 명시하면 클래스 생성시 어떤 타입이든 명시한 typename으로 대치시켜준다. (컴파일러단에서 수행) 따라서 string, int, etc... 어떤 타입이든 담을 수 있었던 것이다. 템플릿(template)이란 단어가 의미하는 '틀', 어떤 데이터 타입이든 담아낼 수 있는 class 틀을 의미한다. 배열 내의 최대 값을 반환하는 템플릿 함수를 만들어봤다. [R..
· C/C++
흔히 IDE에서 free 할때나 포인터에 NULL 값을 넣을 때 자주 쓰는 'NULL' NULL의 원형을 살펴보면 다음과같다. 이놈은 2가지 경우에서 흔히 문제가 발생. any_function(NULL) switch _ case 에서 switch(NULL) 1번의 경우 argument를 int 0으로 인식하고 2번의 경우도 switch(0) 을 받게된다. NULL이 0으로 define 되어있는 것이 그 원인이다. (ambiguous) 이를 해결하기 위해 나온 C++11 의 표준 'nullptr' 포인터 변수에 nullptr을 대입하자. any_ptr = nullptr => left_value(any_ptr)가 포인터 변수라는 것을 알 수 있어 가독성 증가 => switch case & argument 에..
· C/C++
auto 는 컴파일러가 'Inferred Data type"으로 "추론할 수 있는 데이터 타입"으로 자동 형 변환해주는 것이다. std 의 vector같은 컨테이너를 사용할 때 다음과 같은 구문을 흔히 봐왔다. std::vector vec std::vector::iterator itr; for(itr = vec.begin(); itr != vec.end(); ++itr){ } oh.. shit for loop 한번 쓰겠다고 iterator를 이렇게..? auto itr = vec.begin() ; itr != vec.end(); ++itr 이것만으로 쌉거눙; 자동으로 해당 container 데이터 타입에 맞는 pointer를 반환해줌. (auto Casting) [Range based for loop] ..
· C/C++
STL (Standard Template Libaray) 가장 기본적인 data structure [정의] 길이(크기)가 가변적인 array list ♣ Vector의 Capacity (할당된 메모리 공간의 크기)를 넘어서는 시점에서 자동으로 메모리 재할당 및 기존 원소값들의 복사가 발생하는 원리로 크기의 가변성을 보장한다. [Time Complexity Analysis] 임의의 위치 접근 (index 사용) : O(1) 맨 뒤 원소 삽입/삭제 : amortized O(1) 임의의 위치 원소 삽입/삭제: O( N + M ) // N: 삽입될 원소 갯수, M: 해당 원소 인덱스 뒤의 원소 갯수 (한칸 씩 뒤로 밀어줘야 함) 분류 임의의 위치 접근 맨 뒤 원소 삽입/삭제 임의의 위치 원소 삽입/삭제 Func..
· Low Level/OS
Linux 기준 하나의 Process가 메모리에서 차지하는 공간이 4GB이다. 그럼 유저의 RAM 사양이 8GB면 프로세스 2개 로드된 상태에서 끗..? 말도 안되지 근데 어떻게 이런 일이 가능한 것일까? [가상메모리? 물리메모리?] 일단 프로그램을 실행하면, 프로세스 스케쥴러가 가상메모리안에 모든 스택영역을 예약한다. 하지만 물리메모리에는 그렇지 않다. 추가적인 물리메모리가 요구될 때에만 할당한다. 그렇다. 하나의 프로세스가 4GB 만큼 예약되었다고 해서 실제로 CPU가 반드시 4GB만큼 명령어를 읽어나갈 필요는 없다. 실제로 동작할 때 (이 부분은 약간 의문이 남는다) 물리 메모리에 추가 할당된다. [가상메모리 활용 방식] IDT(Interrupt Descriptor Table), System cal..
M_Falcon
Falcon