알고리즘 study -8-

한창희·2021년 7월 1일
0

algorithm study

목록 보기
8/26

<포인터>

-> 값을 저장하는 것이 아닌, 값의 위치(주소)를 저장하는 변수

ex>

int* myPointer; -->> int형 변수의 위치
int a;

a = 5;
myPointer = &a; -->> int형 변수 a가 있는 위치

printf("%d\n", *myPointer);


int* 은 자료형 즉, 타입이다!!

변수앞에 * = 주소를 따라가서 해당 값을 가져오는 것 // 두 개 구분 잘하기

&x : x의 주소
*x : 주소x가 가리키는 변수의 값


#include <stdio.h>

int main() {

  int* address;
  int x;
  
  x = 3;
  address = &x;
  
  
  printf("%p\n", address);  // 주소 출력은 %p 사용
  
  *address = 4;
  
  printf("%d\n", x);
  printf("%p\n", address);

  return 0;
}

주소값은 바뀌지 않는다
저장되는 int 값은 변경


<메모리>

포인터 : 컴퓨터 내부 중에서도 저장장치(메모리)에 관한 것

<자료의 저장 단위>
비트 : 정보의 가장 작은 단위 / 0 혹은 1 을 담음
바이트 : 정보의 기본 단위 / 8개의 비트로 이루어짐
int - 4byte, double - 8byte
KB = 1000byte / MB = 1000KB / GB = 1000MB


<RAM 과 NUMA architecture>

RAM -> 자료를 저장하기 위한 장치 / Random Access Memory

  • 특정 공간에 있는 값을 access 하는데 걸리는 시간이 비슷하다

NUMA -> none uniform memory access / cpu 별로 메모리에 접근 시간 다르다


<Big Endian & Little Endian>

-> 컴퓨터가 값을 저장하는 순서

Big Endian -> 높은 자리가 낮은 주소에 저장 (거꾸로)


<운영체제>

-> 하드웨어(메인보드, 하드디스크, RAM...)를 제어하기 위한 소프트웨어


<기억장소 할당>

  • 변수에 값을 담기 위한 과정
  1. 프로그램이 운영체제에게 필요한 공간의 양을 알려준다
  2. 운영체제가 그 만큼의 공간을 예약한다(다른 프로그램이 해당 공간을 사용하지 못하게 한다 / 다른 빈 공간 준다)
  3. 운영체제가 프로그램에게 해당 공간을 대표하는 주소를 반환한다

<malloc (memory allocation)>

void* malloc(int x); -> x byte의 공간을 할당하여 가장 앞의 주소를 반환

int *, char * 여러 개 있으므로 malloc으로 공간 할당 후 맞는 타입으로 캐스팅 해줘야 한다

malloc 자체는 void* 타입

#include <stdio.h>
#include <stdlib.h>

int main() {

  int* a;
  
  a = (int*)malloc(8);
  
  *a = 10; // a가 가리키는 곳에 10을 넣어라
  *(a+1) = 20;
  
  printf("%d\n", *a);
  printf("%d\n", *(a+1));

  return 0;
}

a 는 공간을 몇 byte 받았는지 모름
a는 int형 가리키고 있으므로 4byte 공간에 10을 저장

a+1은 a가 가지고 있는 주소의 다음 주소
-> a가 가리키는 값의 다음 값

단순히 1 더하는게 아니라 int에 해당하는 4를 더한 주소
(a는 int형 변수를 가리키므로)


<포인터와 배열>

int* a;
a = (int*)malloc(sizeof(int) * 10 );

==>> int a[10]; 과 같은 의미!!


*a = 10;
*(a+1) = 20;
*(a+2) = 30;

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

a[0] = 10;
a[1] = 20;
a[2] = 30;

배열의 형태가 된다 / 두 의미가 같다


a를 그냥 출력하면 주소값이 나온다!(배열 시작 주소)

a+1은 a가 int형 포인터이므로 4를 더한 주소가 출력된다

printf("%p", a) = printf("%p", &a[0])


이미지 출처
https://has3ong.github.io/endian/

profile
매 순간 최선을 다하자

0개의 댓글

관련 채용 정보