본문 바로가기

C5

20201130#(11) 메모리구조 (3) (heap) 동적할당(1) 오늘은! 메모리 구조 heap영역에 대해서 같이 공부해보자. 메모리 구조의 heap영역은 우리가 직접 관리할 수 있는 영역이다. 우리에 의해서 메모리 공간이 동적으로 할당되고 해제된다. 데이터 영역과 스택 영역은 메모리 공간이 compile time에 정해지는데, heap영역은 runtime에 사용자가 직접 정한다. 이렇게 runtime에 메모리 공간 할당받는 것을 메모리의 동적 할당(dynamic allocation)이라고 한다.(반대는 정적 할당 static allocation) 동적 할당을 위해서 알아야 할 함수는 malloc과 free이다. *malloc (MemoryAllocation) malloc은 프로그램이 실행 중일 때 힙 영역에 메모리 할당을 할 수 있게 해 준다. malloc함수를 사용.. 2020. 11. 30.
20201103#(8) 지역변수와 메모리 구조? main 함수에 int c가 선언되었고, func1과 func2에도 c가 선언되었다. 그러면 위 c가 들어가있는 메모리의 주솟값은 같을까? 다를까? 결과는 main함수와 func함수들과의 주소값 달랐으며 func1의 c와 func2의 c 값의 주소값은 같았다. 왜 이러한 결과가 나온것일까? main함수가 실행되고 지역변수 c가 선언되면서 c의 주소도 생겼다. 이후 func1 함수가 실행되고, 지역변수 c가 선언되면서 main함수에 있는 c와 다른 (이름만 같고 다른 변수임 )주소 값을 가진다. 그런데 왜 func2는 func1과 주소가 같을까? 지역변수로 선언하기 때문에 main과 func1의 c값이 다른 것처럼 func1과 func2도 다르지 않을까?라는 의문이 들 수도 있다. 하지만 func1이 실행.. 2020. 11. 3.
20201101#(7) 메모리구조 (3) (전역변수,static) 오늘은 메모리 구조의 data 부분에 대해서 알아보자. 데이터 영역은 간단하게 넘어가면 될 것 같다. 데이터 영역은 1. 전역 변수와 static변수가 할당되는 영역 2. 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 소멸되는 영역 이다. 위의 말이 이해가 안된다면 아마 전역 변수와 static변수의 뜻을 모르기 때문일 텐데 전역 변수는 프로그램 전체에서 사용할 수 있다 하여 전역 변수인데 예를 들어 설명해보자면, void func1() { int a=1; } void func2() { int b=2; } void main() { int c=3; } 와 같은 코드가 있다고 해보자. int a , b, c는 각 함수에 선언된 지역변수(선언된 함수 내에서만 사용 가능 )이다. 만약 여러분이 모든 .. 2020. 11. 1.
20201031#(6) 메모리구조 (2) (stack) 지난 글에서 말했듯이 오늘은 stack의 구조에 대해서 같이 공부하는 시간이다! stack에는 지역변수와 매개변수가 저장되게 되는데 스택 영역의 특징은 LIFO이다.(LAST IN FIRST OUT) ->마지막에 들어온값이 처음 나간다는 뜻인데 일상 속에서 예를 들어보자. 여러분들의 주방이 너무 더러워서 정리를 해보려고 한다. 특히 접시가 널브러져 있어서 한 곳에 쌓아두려고 한다. 차곡차곡 하나씩 접시를 쌓아놓았다. 맨 처음 정리 한 접시는 바닥에 깔려있을 것이고 마지막에 정리한 접시는 접시 더미의 맨 위에 위치해 있을 것이다. 만약 여러분이 접시가 필요해 접시를 쓰려고 할 때는 맨 위에 있는 접시를 사용하게 될 것이다. 즉 마지막에 정리한 접시를 가장 먼저 꺼내오게 되는 것이다. 여기서 접시를 쌓는 행.. 2020. 10. 28.
20201026#(4) 메모리구조 (1) Data science를 배울 때 기본적으로 배워야 한다는 data segment에 대해서 알아보자. 프로그램이 실행될때 프로그램은 RAM에 올라간다. 이때 RAM에 올라오는 프로그램의 내용을 나누자면 code segment, data segment, heap, stack으로 나눌 수 있다. 먼저 code segment에는 프로그램의 코드가 저장이 된다. 이때 코드는 컴퓨터가 이해할 수 있는 기게 어로 바뀌어서 저장이 된다. 예를 들자면 c언어에서 hi를 출력하려면 printf("hi"); 이지만 기계어는 0101 0001 0000 0000 0000 0111 0101 0001 0000 0000 0000 1000 0000 0000 0100 1000 0110 1001 로 나타내야한다고 한다. 기술이 발전함으.. 2020. 10. 26.