본문 바로가기

C7

메모리 동적 할당 지금까지 정적할당만 하였다. 전역변수와 static 변수를 담는 데이터 영역과 지역변수와 매개변수를 담는 스택영역에 대해서만 메모리를 할당하였다. 데이터 영역은 프로그램의 생명주기와 동일하게 할당되고 해제된다. 스택영역은 함수 호출과 종료의 라이프 사이클에 의해 스택영역에 할당되고 종료된다. 즉 이는 프로그램 작성 시점에 기억공간의 할당공간을 어림잡을 수 있다. 정적할당은 쉽게 기억공간을 사용할 수 있고, 에러의 발생 확률을 줄일 수 있다. 하지만 사용하게 될 기억 공간의 크기를 정확히 알지 못하거나, 사용되는 자료의 크기가 각각 차이가 심하다면 우리는 기억공간을 낭비하게 된다. 그렇다면 동적 할당은 왜 하는 걸까? 프로그램 실행 중에 메모리 공간을 사용해야 할 일이 반드시 발생한다. 이 경우 동적으로 .. 2023. 5. 2.
구조체 구조체란? 서로 다른 자료형을 갖는 자료들의 모임을 하나의 자료형으로 정의하여 사용하는 자료형이다. 배열은 동일 자료형만 다루는 것과 달리 다양한 타입들의 모음을 갖도록 할 수 있다. 형태는 다음과 같다. struct 구조체명{ 멤버 1; 멤버 2; ... }; 예약어인 struct를 사용하여 구조체를 정의하며 이후 하위 구조체를 작성한다. 이렇게 만든 구조체는 다음과 같이 선언할 수 있다. struct score, var1, var2; 실제 자료의 형태를 만들고 이를 구조체로 변환해 보자. 학번, 이름, 국영수에 대한 점수를 가진 자료를 구조체로 변환해 보자. struct student x,y; struct student { char name[20]; char no[4]; int age; int sco.. 2023. 5. 1.
포인터와 배열. C언어의 Hello World는 문자열을 입력받는 것으로 보통 시작하더라. 그런데 문자열을 나타내는 타입이 없는 C언어에서 Hello World는 배열을 사용하는데 여기서 포인터의 개념이 바로 들어간다. 무섭게 Hello World부터 포인터라니 char 형 포인터를 알아보자. 포인터 변수는 주소값을 갖는다고 공부했다. 그런데 어떻게 문자열을 받을 수 있을까? char *cp = "hello world"; 이상하다. 포인터 변수에는 주소를 할당한다고 했는데, 예제를 보면 문자열을 할당하고 있다. printf("%s\n", cp); printf("%c\n", *cp); printf("%c\n", *(cp + 1)); printf("%c\n", *(cp + 2)); printf("%c\n", *(cp + 3.. 2023. 4. 29.
포인터 C언어의 장벽으로 포인터를 많이 꼽는다고 들었다. 오늘은 포인터에 대해 알아보자. 목록 포인터의 개념 포인터변수의 선언방법 포인터변수의 참조방법 포인터의 기억공간 표현 포인터 연산 개념 포인터는 변수이다. 변수는 특정 데이터 값을 가지고 있다. 그렇다면 포인터는 무슨 데이터 값을 가지고 있을까? 바로 특정 데이터가 저장된 기억장소의 주소값을 가지고 있다는 것이다. 그렇다 우리는 기억공간을 변수명으로 접근하려는 것이 아니라 실제 주소로 접근하기 위한 방법이다. 일반적인 변수를 표현하는 방법은 변수를 선언하고 이를 통해 기억공간이 할당된다. 그리고 할당된 기억공간에 변수에 대입된 데이터가 저장되게 된다. 그리고 할당된 기억공간은 주소가 부여되어 있다. 즉 일반적인 변수는 그 자체가 기억공간 주소에 할당된 값.. 2023. 4. 29.
C언어에서 배열을 어떻게 다룰까? c언어에서 배열을 선언하게 되면 그 배열의 각 요소를 위한 기억공간이 연속해서 할당된다. int array [5]라는 1차원 배열을 선언하게 되면 int 형 변수 5개가 모여 구성되는 array라는 이름의 기억공간을 가진다는 것을 말한다. C언어서 배열의 이름은 배열의 시작 주소가 저장된다는 점을 기억해야 한다. 즉 별도의 첨자 []가 없는 array라는 자체 값은 array [0]의 주소(&array [0])이다. 배열명인 array 자체는 int형 포인터와 같다. 어떤 기억 클래스를 가지는지에 따라 저장공간이 달라질 수 있지만 int arrray[5]는 4 byte * 5인 20byte 공간을 차지하고 기억공간에 연속적으로 위치하고 있을 것이다. 타 언어와 같이 배열의 선언과 초기화를 동시에 진행한다.. 2023. 4. 17.
입력 및 출력 프로그램 보호되어 있는 글 입니다. 2023. 4. 16.
3D Computer Graphics (3) GPU Rendering Pipe Line을 공부하다 보면 Modeling 이후 좌표 변환을 수행하는 Vertex Shader 부분이 존재한다. Modeling 과정에서 만들어진 Polygon Mesh를 GPU가 입력을 받게 되는데, 이때 각 정점들은 메모리에 다양한 정보를 올린다. vertex array, noraml vertex array, texture coordinate 등등 정보를 가지는데, vertex Shader가 이를 한 번에 하나씩 로드하면서 여러 가지 연산을 수행한다. vertex shader는 프로그램이다. 그렇기 때문에 여러 가지 연산을 프로그래밍해야 하는데, 이때 다음과 같은 역할을 맡는다. modeling 과정에서 생긴 object-space에서 world transform을 통.. 2023. 4. 8.