본문 바로가기

분류 전체보기

(750)
xargs [1. 개요]xargs 는 표준 입력으로 받은 데이터를 명령어의 인자로 변환해주는 명령어이다. find /mydata -name "*.csv" | xargs zip mydata.zip xargs 는 리눅스 커널의 ARG_MAX 를 우회하여 실행하는 기능이 있음(?)
ulimit [1. 개요]ulimit 은 시스템 자원을 과도하게 사용하는 것을 방지하고, 시스템 안전성을 확보하기 위해 사용한다.시스템의 자원의 제한 값을 설정한다. ulimit 명령어를 이용해 현재 세션의 설정 된 값을 확인하거나, 변경할 수 있다. systemd 에 의해 실행되는 경우, .service 파일에 직접 명시해야 한다. PAM (Pluggable Authentication Module)유닉스 계열 시스템에서 인증 관련 작업을 모듈화 하여 처리 할 수 있게 해주는 프레임 워크ssh, su, passwd /etc/pam.conf/etc/pam.d/*[2. 종류]ulimit -ccore dump 파일의 최대 크기- 이 값이 0으로 설정되어 있으면 core dump 파일이 생성되지 않는다.- unlimited..
fsanitize 컴파일 옵션 [1. 개요]c++ 애플리케이션의 다양한 오류를 런타임에 찾고 수정하기 위한 한가지 방법이다.컴파일 시 해당 옵션을 지정하면, 컴파일러가 프로그램에 검사 코드를 자동 삽입하여 오류를 찾는데 도움을 준다. 다양한 옵션을 살펴보면 아래와 같다.-fsanitize=address버퍼 오버플로우, use-after-free 등 메모리 오류 탐지-fsanitize=undefined정의되지 않은 동작 (나눗셈 0, 정수 오버플로우 등)-fsanitize=leak메모리 누수 추적-fsanitize=memory초기화되지 않은 메모리 사용 (GCC 지원 안함.?)-fsanitize=threadrace condition 탐지-fsanitize=pointer-compare잘못된 포인터 비교/연산 감지-fsanitize=poi..
buffer overflow 사례1 [1. 개요]버퍼 오버플로우를 유발 할 수 있는 사례들을 정리한다. 포인터를 전달할 때, 실제 메모리는 해당 포인터 타입에 해당하는 크기만큼의 공간이 할당되어 있어야 한다.아래와 같은 타입 캐스팅은 가급적 하지 않는 것이 좋다.int value = 0x1234;long long *ptr = reinterpret_cast(&value);왜 그런가, ptr 을 대상으로 발생하는 연산은 ptr 이 가리키는 공간이 8byte 만큼 할당되어 있다고 판단하고연산을 진행한다.그러나, 실제 메모리 공간은 4바이트 이므로 할당된 메모리 공간을 넘어서는 문제가 발생할 수 있다. 아래 코드를 보면, func() 에는 변수 a 의 주소만 넘기는데, b 의 값이 변경되어 버린다.#include void func(unsigned..
Segmentation fault 사례5 [1. 개요]strncpy 사용 시, 버퍼 오버플로우 발생.정확히는, strncpy 사용 시 마지막 3번째 인자의 계산 오류로 인해 발생한 문제임. 아래와 같은 코드의 문제점은?#include #include #define max(a, b) ((a) > (b) ? (a) : (b))int main(){ char buf[512]; char buf2[512]; strcpy(buf2, "hello"); strncpy(buf, buf2, max(static_cast(strlen(buf2)) - strlen("helloworld"), 0)); std::cout 바로, int 와 size_t 간 자료형의 연산이다.size_t 는 64bit 프로그램에서..
스레드 풀 사용 관련 [1. 개요]병렬 처리 등을 위한 스레드 풀 사용 예제I/O Bound 적합CPU Bound 작업 처리를 위해선, ProcessPoolExecutor 사용기본적으로 메모리 구조는threading=> pthread_create 기반, 전역 변수 등은 공유 됨.multiprocessing=> fork() 기반, 값은 같을 수 있지만 공유되지 않음=> 변수 공유를 위해선 별도 처리가 필요. (multiprocessing.Value, )[2. 예제]
std::enable_shared_from_this [1. 개요]std::enable_shared_from_this 를 상속한 클래스 (여기서 템플릿 T는 상속한 클래스를 말함) 는멤버 함수 내에서 shared_from_this() 를 호출하여 자기 자신에 대한 shared_ptr 을 생성 할 수 있다. 이것이 주로 활용되는 시점은 다음과 같다.콜백에서 자기 자신을 공유해야 할 때 (재참조 할 때)자기 자신을 다른 shared_ptr 구조로 넘겨야 할 때기타...shared_ptr 을 공유한다는 의미는 아래와 같다.실제 객체는 하나임그러나 여러 곳에서 참조하게 됨그래서 더 이상 참조하는 곳이 없어지게 되면 해당 객체는 자동 소멸하게 됨.그래서, 콜백에서 자기 자신을 공유해야 한다는 것은 아래와 같은 의미가 있다.일반적으로 콜백이라 함 은 특정 이벤트 발..
... [1762] [1. 문제 설명]https://www.acmicpc.net/problem/1762[2. 풀이 접근]완전 탐색시간 초과 발생 사유...선형 탐색 안에서 이분 탐색 시, 선형 탐색 하는 양이 더 많아지게 된다면,,이분 탐색의 장점이 사라짐.즉, 서로 연결 된 두 점의 동시에 연결 되는 점을 찾기 위해서,선형 탐색 (outer) - 이분 탐색 (inner) 조합을선형 탐색 (outer) 의 대상이 되는 노드 의 차수가 항상 더 낮은 값이 오도록 하는 편이 좋다.[3. 코드]
mo`s. [13548] [1. 문제 설명]https://www.acmicpc.net/problem/13548[2. 풀이 접근]동일한 숫자의 발생 횟수를 저장할 배열이 필요함. (occurs)index: 수열의 원소value: 현재 구간에서 해당 원소의 발생 횟수발생 횟수에 대해서 해당 횟수만큼 존재하는 숫자의 개수. - 3이라는 원소가 4번 발생하고, 5라는 원소가 4번 발생한 경우- 4번 발생한 원소의 개수는 2개가 된다.index: 횟수value: 횟수만큼 존재하는 숫자의 개수.즉, 쿼리에 대해서 각 포인터가 (Left, Right) 넓혀지는 방향으로 움직이는 경우.구하고자 하는 최대 값이 갱신 되는지 확인 하도록 한다.반대로, 각 포인터가 좁혀지는 방향으로 움직이는 경우.현재 포인터가 가리키는 원소 a 의 발생 횟수가 1..
제곱근 분할법 [1. 개요]배열에 대한 제곱근 분할법이란배열을 길이의 제곱근 단위로 나누어 구간에 대한 쿼리를 처리하는 것이다.즉, 오프라인 쿼리 처리에서 매우 유용하지만, 수정이 불가능한다는 단점이 있다.[2. 상세]배열의 특정 구간에 대해 최대값, 최소값 등을 계산해야 한다고 할 때,세그먼트 트리 등을 이용해 처리할 수 도 있지만, 배열을 특정한 크기로 묶어서(이하 블록) 아래와 같이 처리 할 수 있다.쿼리 구간 [L, R] 이 블록 들에 interleave 한 경우 쿼리 구간 [L, R] 이 전체 블록을 포함 하는 경우전체 배열의 길이를 N , 블록의 크기를 K 라 할 때, 1번 경우는 아래와 같다.L 이 왼쪽 블록에 포함되고R 이 오른쪽 블록에 포함 됨.이 경우, 쿼리의 시간복잡도는 2K2번 경우는 전체 구간이..