21. 1. 17

커피 내리는 그냥 사람·2021년 1월 17일
1

4~5과 복습 중 다시 이해하거나 새로 알아낸 점

  1. 내가 쓴 알고리즘의 시간이 얼마나 걸리느냐에 따라 나눠볼 수 있던 내용 :
  • 입력값에 따라 시간이 얼마나 걸리는지
  • 입력값에 따라 함수가 얼마나 커지는지 : 성장률, 그래프를 보는 것인데 보통 추이를 보기 때문에 변수 옆에 붙은 상수(6n.. 에서 6)는 빼고 생각한다. 그래서 이 알고리즘이 얼마나 걸리는지 보는 것을 점근적 표기법이라고 하는데 거기에는 두 가지가 있다.

Big-O : 알고리즘의 검색 시간의 상한선을 두는 것
e.g 10달러가 있는데 친구한테 100달러 미만으로 있어 라고 하는 것과 같다고 하는 개념. "최대 ~정도 걸릴거야"

오메가 : 알고리즘의 검색시간에 하한선을 두는 것
e.g 100달러가 있는데 친구한테 적어도 10달러는 있어 라고 하는 것과 같다는 개념. "최소 ~는 걸리지 않을까?"

by Khan Academy

솔직히 아주 자세하게 이해되는 개념은 아니다. 이건 내가 문과라 겪는 짧은 수학 지식 때문인 듯.. 예시 정도로만 이해하자.

  1. 포인터 개념 :
    참고한 블로그 주소

포인터 변수 : 메모리의 주소를 저장하기 위한 전용 변수. 메모리의 주소가 "집주소" 같은 위치 정보라면 포인터는 그 "주소가 적힌 메모지"

즉 포인터의 도움을 통해 비트마다 저장된 주소로 이동할 수 있다는 것.

다시 생각해보는 우체통 예시 : 456이라는 우체통에 든 데이터와 포인터에 적힌 내용(456)은 같을 수밖에 없다. 그렇기 때문에 포인터로 그 데이터를 찾아갈 수 있다.

대강 이런 개념으로 이해하고 있어야겠다.

  • 데이터는 각 고유의 자리에 주소값을 가지고
  • 그 데이터를 찾아가는데 쓰는 용지 같은 것이 포인터.
  1. 문자열 : 사실 문자열이라는 개념은 없다.(보조 장치를 통해 있다고 느꼈을 뿐..?) 문자들이 데이터로 저장된 것을 포인터를 통해 첫 글자의 주소를 찾아서 다음 문자들의 연관성을 알아내는 방식만 있을 뿐. 그래서 같은 글자라도 주소를 비교한다면 다른 값이 나올 수 있다.(위치가 다르니까..?)

개념은 대충 무슨 말인지 알 거 같은데 아직은 어렵다.

  1. 코드영역 / 데이터 영역 / 스택 / 힙

자세하게까진 이해가 되진 않지만 이런 구조로 되어 있다 정도는 알겠다. 나중에 더 기회가 되면 이해해봐야겠다.

참고 블로그 주소

참고 블로그 주소 2

  • 코드영역 : 실제 코드가 작성되는 영역
  • 데이터 영역 : 프로그램이 실행되면서 필요한 변수가 저장 되는 영역, 전역변수나 정적 변수를 위한 공간.
  • 힙 : 동적할당 통해 생성된 동적 변수가 관리되는 영역. C기준 malloc 등 통해 생성된 것들이 할당 된 영역.(필요에 의해 생기는 메모리 영역)
  • 스택 : 함수 내에 정의 된 지역변수가 저장되는 영역. 차곡 차곡 쌓이며 처리가 끝나면 해체됨.(재귀함수 등 너무 깊게 처리되어 에러나는 부분, 스택오버플로어)

그 외 부분들도 복습을 하긴 했으나 어렵다. 조금 더 많은 코드와 상황을 경험하다 보면 이해가 될 듯 싶다.

profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글