추상화 데이터 타입 그런 자료구조를 왜 만들고 왜 필요할까?

 

생각해보면 스케쥴러를 짜는데

 

큐(선입선출,FIF0)를 사용하지 않고 배열을 이용한다면....

 

직접 인덱스(index)관리를 일일히 해주어야 한다는 소리인데

 

규모가 커지면 이건 정말 쉽지 않은 문제이다.

 

하지만 추상화데이터타입을 만들고 그를 활용한다면 단지 pop과 푸쉬만 이용하면

 

따로 직접 index 를 관리 하지 않아도 된다

 

추상화데이터타입을 이용하는 이유 중 하나는 **인덱스 관리의 어려움** 이 있지 않을까?

 

스택에 함수 call과 관련된 정보를 담을 때도 스택이라는 자료구조를 이용하지 않으면 생각만 해도 끔찍하다...

 

들은 내용중 기억에 남기고 싶은 내용이라 정확하지 않을 수 있지만 기록을 해놓습니다...

'학부생 공부 > 생각들' 카테고리의 다른 글

정적영역, 스택영역, 그리고 힙 영역  (0) 2019.11.09
go to문? 왜 남아 있지?  (0) 2019.11.06

 # 메모리 영역의 구성

 

메모리 영역은 위와 같이 구성되는데 "가상 메모리의 구성" 이다.

스택 영역은 주로 지역변수, 매개변수, 함수의 반환값, 함수 호출의 주소 등이 저장된다.

힙영역은 주로 동적 할당을 할 때 사용되는 영역인데 다들 잘 알듯이

c++에서 new, delete이 c 에서 malloc, free 등이 있는데 동적 할당을 하고 사용을 했으면 해제 하는것에도 주의를

기울여 주어야 할것이다. 

 

 

# 다른 영역의 메모리를 사용할 때의 속도의 차이는 어떻게 될까?

- 이를 한번 알아보도록 하자.!

- 배열은  int 형으로 크기는 10000

- 충분한 횟수의 함수 호출(1000001)

-#include<time.h> , clock_t 를 이용한 시간 계산

 

 1. 배열을 정적영역에 선언해서 할당 받는 함수.

 2. 배열을 스택영역에 선언해서 할당 받는 함수.

 3. 배열을 힙영역에 선언해서 할당 받는 함수.

 

코드의 이해는 어렵지 않을 것이다. 다음과 같다.

결과는 어떻게 될까?.....

 

<결과화면>

위와 같다. 시간 자체 값은 변경될수 있지만

비교를 해보면 

정적영역에 선언   <   스택영역에 선언  <  힙영역에 선언

순이다.

 

동적할당의 경우

-컴퓨터의 저장소는 <  레지스터 / 캐쉬 L1 / 캐쉬 L2  /  memory / HDD >

 순으로 왼쪽에 있는 저장장치 일수록 속도가 빠르고 용량이 작으며 용량당 가격이 비싸다.

오른쪽으로 갈수록 느리지만 용량이 크고 값이 싸다

그래서 OS에게 요청해서 memory allocation 은 memory에서 일어나므로 느릴수 밖에 없다.

 

일반적인 힙 성능 문제들이 있다.

- 할당 작업으로 인한 속도 저하

        만약 사용가능한 블록이 사용가능 목록에 없다면 런타임에 더 큰 블록을 찾거나 새블록을 할당 받아와야한다.

- 해체 작업으로 인한 속도저하

- 힙 경합으로 인한 속도 저하 

        두개이상의 쓰레드가 접근 하려고 하는 경우 한 쪽 작업이 완료되어야 접근가능

-힙 손상으로 인한 속도 저하

 

알고 싶었던 내용과 그러한 현상이 나타난 이유를 기재 해보았습니다.

틀린 부분이 있을 수 있습니다. 알려주시면 수정하겠습니다. !

 

 

'학부생 공부 > 생각들' 카테고리의 다른 글

abstract data type 어떤 이유?  (0) 2019.12.01
go to문? 왜 남아 있지?  (0) 2019.11.06

수업시간 교수님께 들은 내용을 정리.

 

Dijkstra는

structured programming without GOTO 를 주장

 

Knuth는

structured programming with GOTO 를 주장

 

우리는 goto가 필요없이 프로그램을 짤 수 있다

하지만 goto가 있다면 매우 효율적 인 경우 가 있다.

 

예를 들자면

while(){

...

 while(){

 ...

  while(){

  ... 

}

}

}

등의 코드에서 (반복문을 깊숙히 내려갔을때)

goto 문을 사용가능하면  goto를 통해 이 반복문들을 쉽게 빠져 나올 수 있다.

없다면?

여러개 타고 들어온 반복문들에 빠져나오는 조건을 설정 해주어 나와야 할 것이다.

 

이러한 사항들이 있음을 Knuth는 주장을 했고 

지금 현재 우리는 여전히 goto문을 사용 할 수 있다.

이 자체가 필요성을 인정했기 때문에 남아 있는 것 일 것이다.

 

물론 goto 문을 남용 할 경우 ugly code가 될 수 있고 이는 잘 짠 코드가 아니다

(잘 짠 코드란? - 같은 기능을 하는 프로그램을 더 효율적이고 알아보기 쉽게 짠 코드)

 

그러므로 goto문을 남용 하지는 말되 정말 필요한 순간(goto문이 효율적인) 이 온다면 쓸 수 있다.

그 점을 기억해 두자.!

 

참고) 기억과 조사 그리고 기억해두어야 할 점을 위주로 정리 함으로 사이사이 약간의 오류들이 있을 수 있음.

 

'학부생 공부 > 생각들' 카테고리의 다른 글

abstract data type 어떤 이유?  (0) 2019.12.01
정적영역, 스택영역, 그리고 힙 영역  (0) 2019.11.09

+ Recent posts