C

· C
[배경] Dev-C++ 를 사용하다가 느낀 단점. 2015년 4월까지 릴리즈 이후로는 업데이트가 없음. 컴파일 이전단계에서 auto-syntax, auto-complete 가 미흡하단점 Debug attach 수동으로 변수명을 일일히 입력해줘야 한다는점 (혹은 text-editor 창에서 커서를 올려야함) 새로운 Realease가 지속적으로 출시되는 Open source based IDE인 kDevelop를 찾아보았다. [Setting Environment] Windows 10 Home Edition 64 bit [Install] 1. kDevelop4 설치 https://userbase.kde.org/KDevelop4/Manual/WindowsSetup 2. CMake 설치 https://cmake.o..
· C/C
1. 정의 메모리에서 해제 된 공간(ex. free(ptr))을 가리키는 포인터 (허상 포인터) 2. 발생 원인 free를 통해 메모리를 해제했지만 해당 포인터변수가 해제된 메모리 주소를 가지고 있는 경우. 블록 스코프 내에서(ex. 임의의 함수 내에서) 할당된 변수의 주소를 가리키고 블록이 끝난 경우 3. 증상 Segmentation fault memory access deny -> 예측 불가능한 동작 4. 해결 방법 free 할 경우 메모리 해제 이후 해당 포인터변수를 자동으로 NULL을 가리키게한다. free(ptr) ptr = NULL; Dangling Pointer 문제를 자동으로 발견하게 해주는 third party tool 사용 5. 예제 free해도 Dangling Pointer가 되지 않..
· C
할당 방법 종류 설명 Dynamic Allocation Heap, Stack segment 프로그램 실행 중 {} 블록단위 필요시 마다 메모리를 할당하고 , 수행 후 할당을 해제하여 시스템에 의해 혹은 원시코드로 제어된다. Static Allocation Code, Data segment 프로그램 시작에 할당되고 종료시에 해제된다. Segment의 정의 대개 64KB 논리적 크기 단위로 나뉘어 할당/해제로 관리하게 되는것 segment number + offset 으로 관리되고, 물리장치와 같은 크기로 나뉘어지는 페이지와 대비되는 개념이다. Segment 가 왜 필요한가요? 명령어 한 개당 기억장소가 할당되어 저장되는 방식으로 프로그램이 수행될 경우 실행속도가 매우 느려진다. 따라서 일정한 크기의 메모리..
· LINUX/Linux
프로그램 목적 각각 매개변수의 값 (0~9)를 출력하는 10개의 쓰레드를 생성하여 화면에 쓰레드 아이디-매개변수값 0~9를 출력하는 프로그램을 만들어보자. 도중에 쓰레드 생성에 실패하면 실패 에러메시지를 띄우고 해당 id의 쓰레드의 값은 출력하지 않고 다음라인으로 넘어간다! 이 코드에는 문제가 있다! 모든 쓰레드가 0~9이 아니라 10을 출력한다 for (i = 0; i < NUMTHREADS; i++) if (perror = pthread_create(tid + i , NULL, printarg, (void *)&i)) { // ~~ (중략) } 이 코드가 원인이다. 사실 pthread_create를 호출하면 메인은 OS에게 "쓰레드를 생성해줘!"라고 요청을 보내고 '요청에 성공!'하기만 하면 0을 바..
· LINUX/Linux
만들고자 하는 프로그램 개요 정의 a.txt 에 쓰여있는 내용을 b.txt 로 복사하며 몇 바이트가 복사된 것인지 메시지를 띄우고자한다.! 1. 먼저 파일 내용을 복사할 함수 'copyfilemalloc'을 들여다보자. Q1. 만약 동적 메모리 할당이 아닌 bytesp를 static으로 선언한다면? A. 하나의 쓰레드에서는 읽고 쓰는데 문제가 없지만 2개 이상의 쓰레드가 bytesp를 이용할 경우 둘다 같은 장소에 바이트수를 저장하므로 한 쓰레드가 다른 한쪽의 값을 덮어 씌우는 결과가 발생.. Q2. 동적 메모리 할당의 단점은? A. 메인 쓰레드가 명시적으로 '해제' 해주지 않으면 메모리 leak 이 발생한다. Q3. 다른 대안은? A. 생성자 쓰레드 (create할때 생성된 스레드)가 한 공간을 별도로..
· C/C
malloc 과 유사함 그냥 형태만 다른거 뿐이야~ 헤더파일: stdlib.h Interface void *calloc(size_t nelem, size_t elsize) Parameter nelem(new Element): 대상 요소의 갯수 elsize(Element Size): 대상 요소 하나당 크기 Function 요소 갯수 * 요소 크기 만큼 동적 메모리 할당 Return void * ex) 결국 아래 두 문장은 수행하는 바가 같다. arr_2 = (int*) malloc(sizeof(int)*5); // 메모리 할당, 배열의 크기만큼 할당하기 위해 5를 곱함 arr_2 = (int*) calloc(5, sizeof(int)); // sizoe(int)크기의 변수를 5개 저장할 수 있는 공간할당
M_Falcon
'C' 태그의 글 목록