본문 바로가기

C언어31

[ C ] 메모리 이해하기4 _스택(stack) 메모리란? 스택(stack) 메모리란? - 함수를 호출할 때 스택에 정확이 어떤게 어떤 순서로 들어가는지 알고 싶으면 함수 호출 규약에 따라 달라짐 어떤 컴파일러는 어떤 규격을 쓰는 매개변수 쓸때 어디부터 푸쉬한다든지 등 규약이 정해져 있으니깐 호출 받는 애와 주는 애에 관한 규약 2020. 7. 15.

[ C ] 메모리 이해하기3 _register 키워드란? register 변수의 제약 register 키워드란? register 변수의 제약 ■ register란? 프로그래머가 레지스터를 직접 사용하려면 어셈블리어로 코딩하면 됩니다. 물론 C언어도 가능하지만 레지스터 사용을 '요청'만 하기 때문에 실제로 그 명령이 레지스터로 갈 지, 스택 메모리로 갈 지는 컴파일러 마음입니다. 진짜 레지스터로 갔는지 확인하려면 어셈블러를 보면됩니다. 데이터를 레지스터에 저장한다고 할 때 register 키워드를 사용하면 됩니다. 이런 키워드를 저장 유형 지정자(storage-class specifier)라고 하는데 데이터를 어떻제 저장해야 하냐를 알려주는 키워드입니다. register 선언 방법은 아래와 같습니다. register ; int num; register size_t i; // .. 2020. 7. 14.

[ C ] 메모리 이해하기1_메모리의 종류(스택, 힙, 레지스터?) 메모리의 종류(스택, 힙, 레지스터?) ■ 컴퓨터 구성품 컴퓨터는 위와 같이 여러 부품들이 조립되어 있습니다. 그래서 어떤 작업을 하려면 부품들 간의 협업이 필요합니다. '버스' 통로를 이용해서 연결될 수 있지요. 메모리에 대한 구체적인 설명에 앞서 일단 프로그램에서 주로 사용하는 부품 2개를 먼저 간단히 보겠습니다. CPU와 앞으로 계속 다루게 될 메모리입니다 CPU 메모리 - 모든 연산을 처리하는 사람 뇌 같은 역할 - 어셈블리는 메모리랑 상관없이 씨피유가 이해하는 언어 - 실행 중인 코드 및 연산의 중간 결과 등을 저장하는 공간 - 변수나 배열 등에 대입되는 데이터가 저장됨 - 생각한 것을 '적어둔다'라는 점에서 메모장 같음 ■ 메모리 구분 메모리는 크게 두 가지로 나눌 수 있습니다. 스택(stac.. 2020. 7. 12.

[알고리즘] 큐(Queue) 개념/용도/삽입/삭제/검색(C언어) 큐(Queue) 개념/용도, C언어로 삽입/삭제/검색 구현하기, 예제 스택은 출입구가 하나였다면 큐는 2개인 자료구조입니다. 스택과 마찬가지로 자료의 삽입과 삭제에 대한 규칙이 있는 자료구조 중 하나입니다. 선입선출(first in first out)로 먼저 들어간(enqueue) 데이터가 먼저 삭제(dequeue)됩니다. 영어로 Queue도 한 줄로 서있는 상태를 의미하니 아래 그림을 기억하면 좋을 것 같습니다. 데이터가 10, 20, 30 순으로 삽입되었으면 삭제도 10, 20, 30 순입니다. 즉, 삽입 순서와 삭제순서가 같죠. 언제나 가장 처음에 있는 자료만 제거 가능하고, 중간 자료에 임의 접근 안 됩니다. ■ 큐의 삽입 en + queue = enqueue 1. ~속에 넣다 1 대기줄 큐에 넣.. 2020. 7. 11.

[알고리즘] 스택(Stack)의 삽입/제거/검색(C언어) 스택(Stack)의 삽입/제거/검색(C언어) C언어로 자료구조 스택의 삽입, 제거, 검색의 예를 코드로 보겠습니다. 스택(Stack)의 개념을 파악하고 싶다면 아래 글을 먼저 읽어주세요. 스택이란? 글 보러가기 ■ 스택의 삽입 최대 8개의 요소가 들어갈 수 있는 스택입니다. 값을 삽입할 때 배열에서 사용하는 insert를 스택에서 push로 사용합니다. C 언어로 구현한 코드를 보겠습니다. enum { MAX_NUMS = 8}; int s_nums[MAX_NUMS]; // 8개 요소를 넣을 수 있는 배열 생성 size_t s_num_count = 0; // 데이터를 넣을 자리(인덱스) void push (int n){ assert(s_num_count < MAX_NUMS); s_nums[s_num_cou.. 2020. 7. 10.

[ C 언어 ] 함수 포인터란? C 언어 함수 포인터란? C언어를 Low레벨 언어라고 볼 수 있는 이유 중 하나는 '포인터'입니다. '포인터'를 이용하면 메모리에 접근할 수 있기 때문입니다. '함수 포인터'도 함수가 저장되어 있는 메모리 공간에 접근할수 있습니다. 어떻게 가능할까요? 바로 함수의 주소 값을 통해서입니다. 즉, 함수의 주소 값 저장을 위해 별도로 선언한 포인터 변수를 '함수 포인터'라고 합니다. ■ 함수 포인터 변수의 선언 1. 반환형이 int 2. 함수포인터의 이름 3. 매개변수 선언이 int 1개 ■ 함수 포인터 변수의 쓰임새 - 구조체에서 멤버함수를 커스터마이징할 때 - 함수 자체를 매개변수로 받을 때 ■ 함수 포인터 변수의 예제 #include void fun(int num) { printf("%d\n", num).. 2020. 7. 7.