Programming/C언어
-
[C] malloc, calloc, realloc을 이용한 메모리 동적 할당Programming/C언어 2014. 6. 26. 00:31
동적할당을 사용하는 이유는 무엇일까? c언어의 메모리 구조에 대해서 알고 있다면 동적할당을 사용하는 이유를 쉽게 알 것이다. 2014/06/26 - [Programming/C언어] - [C] 스택(Stack), 힙(Heap), 데이터(Data)영역 malloc 함수 - 동적으로 메모리를 할당하는 함수 (힙 영역에 메모리를 할당) #include void* malloc(size_t size)// malloc 함수의 원형 함수 호출시 할당하고자 하는 메모리의 크기를 바이트 단위로 전달하면 그 크기만큼 메모리를 할당하게 된다. 그리고 할당한 메모리의 주소(첫 번째 바이트의 주소)를 리턴한다. 메모리 할당에 실패하면 NULL이 리턴된다. 리턴형이 void*(void 포인터) ?? malloc은 단순히 메모리만 ..
-
[C] 스택(Stack), 힙(Heap), 데이터(Data)영역Programming/C언어 2014. 6. 26. 00:20
C언어의 메모리 구조 프로그램을 실행시키면 운영체제는 우리가 실행시킨 프로그램을 위해 메모리 공간을 할당해준다. 할당되는 메모리 공간은 크게 스택(Stack), 힙(Heap), 데이터(Data)영역으로 나뉘어진다. 이러한 메모리 공간이 어떠한 용도로 언제, 어디서 할당되는지 알아보도록 하자. 할당 시기 : 프로그램이 실행될 때마다할당 장소 : 메인 메모리(RAM)할당 용도 : 프로그램 실행 시 필요한 메모리 공간(지역변수, 전역변수 선언을 위해) 할당 데이터(Data) 영역 - 전역 변수와 static 변수가 할당되는 영역 - 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리에서 소멸됨 #include int a = 10;// 데이터 영역에 할당 int b = 20;// 데이터 영역에 할당..
-
[C] Log2 (밑이 2인 로그 함수) 구하기Programming/C언어 2014. 3. 28. 02:53
C에는 자연로그를 구하는 log() 함수와, 밑(base)이 10인 상용 로그를 구하는 log10()함수만 있기때문에 밑이 2인 로그를 구하려면 직접 함수를 만들어야 한다. logB(숫자, 밑) 이라는 함수를 만들어 사용하도록 하자. double logB(double x, double base) { return log(x)/log(base); } 매크로 함수로 정의해서 사용해도 잘 된다. #define logB(x, base) log(x)/log(base) base에 2.0 대신 다른수를 넣어주면 다양한 밑을 가진 로그를 구할 수 있다. 원리는 다음과 같은 공식을 사용한 것이다. 예제 #include #include //#define logB(x, base) log(x)/log(base) double l..
-
[C] C언어 M_PI 사용하기Programming/C언어 2014. 3. 26. 00:58
#include 를 사용하여 수식을 계산할때, 원주율값이 필요 한 경우가 있다. 원주율값을 잘 외우고 있는경우 상관은 없지만, 단순히 3.14라는 값을 사용하여 알고리즘 문제를 풀 때 소수점 뒷자리 문제로 답이 틀리는 경우가 종종 발생할 수 있다. 그렇다고 원주율을 소수점 10자리 이상 외우고 다닐수는 없다. 이럴경우 math.h에서 원주율 값을 제공해주지 않을까 찾아보지만 M_PI를 사용하면 에러가 발생한다. M_PI 상수는 C표준이 아니기때문에 기본적으로 사용할 수 없다고 한다. math.h를 include 하기전에 #define _USE_MATH_DEFINES 를 정의해 주어야 한다. 이제 M_PI를 사용할 수 있다. #define _USE_MATH_DEFINES를 써주는 이유 #define _US..