- NEW초롱이의 하루
- kisa
- 길은 가면, 뒤에 있다
- C언어 예술가
- Zer0 day - Zer0 day
- Information Security
- Secure-EDU
- 앙큼한유채's 일상 Story
- Library of Ezbeat (잠정 폐쇄)
- The Factory
- 안드
- 모후모후의 커뮤니티
- 공학도의 잡다한 시선
- 안드2
- IT속에 코코아
- IP주소검색(whois)
- IP주소검색(좌표포함)
- 소프트웨어 경력 관리
- 해저 케이블 지도
- MAC주소검색
- IANA
- 포트번호검색
- 자신의IP확인
- 웹페이퍼캡처
- 나의패스워드보안등급
- 웹 취약점 분석
- IT용어정리
- GitHub
- 라이브러리 모음
- 웹마당넷
- 시스템콜참고
- BCD 변환
- 보안뉴스
- 코딩도장(C, Python)
- 백준알고리즘
- 코딩테스트 연습
- 웹 사이트 테스트
- 스크립트꾸미기
- ctf대회목록
- 전자신문
- hash 크랙
- CVE
- 도메인등록
- N클라우드
- BugBountyList
- 칼리공식사이트
- CR4FTING BOX
- 아스키코드 변환
- 웹 사이트 통계 및 평가
- PDF변환
- AWS 및 클라우드 정보
- 가상화 및 서버관련
- 티오리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 쉘 스크립트
- Android
- centos docker
- Python
- nginx
- Java
- System
- GUI
- Linux
- 쉘 스크립트 if문
- 그라파나
- GPIO
- API
- 리눅스
- LEVIATHAN
- synology
- docker
- 자바
- 쉘 스크립트 기초
- RaspberryPi
- ACL
- JSP
- 메소드
- 라즈베리파이
- 네트워크
- 프로젝트
- 안드로이드
- 클라우드
- Shell script
- Tkinter
- Today
- Total
IT창고
C 동적할당 본문
C언어에서 동작할당에 대해 알아보겠습니다.
메모리를 할당할때 정적할당과 동적할당이 있습니다. 정적할당은 일반 변수나 배열(코드에 공간의 크기/고정)을 사용하는 방식으로 int iNum과 같이 사용합니다.
정적할당은 기본적으로 자동 소멸이 됩니다.
동적할당은 함수를 이용하여 '런타임' 도중 원하는 크기의 메모리 할당합니다.
- 런타임 : 프로그램 실행 중
함수로는 malloc()과 free()가 있습니다. malloc()함수가 동적할당을 해주는 함수이며 free()함수가 할당된 공간을 사용한 뒤에 할당공간을 삭제해주는 역활을 합니다.
JAVA언어 같은 경우는 JVM(java.exe)이 메모리 관리를 해주지만 C언어는 프로그래머가 직접 삭제해줘야합니다 만약 삭제해주지 않는다면 메모리 상에 공간이 계속 존재하게 되며 이러한 메모리가 계속 쌓이면 프로그램 오류가 일어나게 됩니다 이와 같은 현상을 메모리 누수 현상이라 합니다.
먼저 정적할당 코드를 확인해보겠습니다. 만약 3개의 과목을 4개 혹은 5개로 바꿔야한다면 변수에 숫자와 배열을 직접 바꿔줘야만 합니다.
위의 코드를 동작할당 코드로 바꿔보겠습니다.
pArrScore = (int *)malloc(iCount * sizeof(int)); 코드는 위의 정적할당 코드의 int iArrScore[3];과 같습니다. 형변환을 하고 만들고 싶은 공간의 크기를 계산하는 방식입니다.
동적할당 + 초기화까지 완료되면 포인터변수를 배열처럼 사용할수있게 됩니다.
선행처리에 대해 알아보겠습니다.
선행처리는 컴파일 이전에 하는 일로 단순 치환 혹은 특정 패턴 일떄 변경을 하며 매크로라고 할수있습니다.
(#define 매크로)로 사용됩니다. 이런 매크로를 사용하는 이유는 3.14가 사용된 모든 코드를 하나씩 바꿀필요없이 define PI만 바꾸면 모두 변경이 가능하기 때문입니다.
마지막으로 전역변수에 대해 간단히 알아보겠습니다.
먼저 지역변수는 특정 지역에서 생성되는 변수로 지역이 끝나면 자동 소멸합니다.
전역변수는 전체영역에서 존재하며 함수 외부에 선언하게 되고 프로그램 시작 시 생성되며 프로그램이 종료가 되면 소멸합니다. 전역변수는 매개변로 값을 전달할 필요가 없습니다.
iNum변수는 함수가 호출되면 생성되고 수행이 끝나면 소멸합니다 하지만 static int sNum2 변수는 함수안에서 전역변수화를 하는 방법으로 지역안에서 static을 이용하여 전역변수처럼 만들어진 변수 입니다. 기능은 함수 밖에 선언된 전역변수와 같습니다.
'프로그래밍 > C' 카테고리의 다른 글
C 구조체(Struct) (0) | 2018.06.04 |
---|---|
C 포인터(Pointer) (0) | 2018.06.02 |
C 배열(Array) (0) | 2018.05.29 |
C 함수 연습문제 (0) | 2018.05.24 |
C Function (함수) (0) | 2018.05.24 |