본문 바로가기

Doc/컴퓨터

컴퓨터과학 CS50 2020 Lecture 4 : Memory

 

 

 

 

<강의 필기>

 


hexideciaml 
16진법 123456789ABCDEF
FF = 255 = 11111111
48 0x48
49 0x49
21 0x21
2개의 16진수는 1byte의 2진수로 변환된다.

full red. full green. full blue = white (255, 255, 255) FFFFFF
no red. no green. no blue = black (0, 0, 0) 000000
red (255, 0, 0) FF0000
green (0, 255 0) 00FF00
blue (0, 0, 255) 0000FF

 

 

 



address
inside of your computer’s memory는 서로를 구별하는 고유한 주소를 가지고 있다.
0x12345678
변수 이름 앞에는 ampersand를 붙인다.
ampersand는 그 변수가 어디 주소에 저장되어 있는가를 말한다.
0x7ffd80792f7c라는 주소가 복잡해서 간단하게 만들어본다.

#include <stdio.h>

int main(void)
{
    int n = 50;
    printf("%i\n", *&n);
}

 

 




pointer

변수의 adrress를 저장한다.

pointer는 우편함과 같다.
우편함에는 어떤 유형의 파일을 저장한다.
집/회사 주소와 같이 컴퓨터 메모리에도 주소가 있다.

 

포인터는 특정 주소를 가리키는 변수일뿐, 메모리의 크기는 크게 관련이 없지만,
운영체제에 따라 64bit, 32bit 등으로 달라진다.

 

int n = 50;
int *p = &n;


p는 address를 저장한 변수이다.
integer n은 50을 0x123 위치에 저장한다.

 

 

 



typedef
C 언어에서는 string이라는 자료형이 없어서
별도로 포인터를 정의하고 배열의 순서를 설정하는 작업이 필요하다.
cs50 cloud shell에서는 c언어와 다르게 typedef char *string이라고 문자열 자료형을 마련했다.

 

s is at 0x123.

s[0] H 0x123
s[1] I 0x124
s[2] ! 0x125
s[3] \0 0x126

*s는 string pointer를 가리킨다.
address는 첫 번째 byte를 기준으로 한다.

 

 

 

 

 

Memory

malloc
변수의 memory allocation을 정의한다.
정해진 크기 만큼 메모리를 heap 영역에 할당한다.

 

heap overflow

stack overflow라고도 한다.
memory 용량이 heap 영역을 넘어간다. 

 

virtual memory
실행 프로그램 메모리의 크기에 따라 자동으로 확보되는 여유 메모리 공간이다.

 

valgrind grant
memory leak과 buffer overflow를 확인한다.
메모리 누수가 발생하면 시스템 성능이 낮아진다.
원래 사용할 수 있는 메모리공간을 연산에 사용하지 못하기 때문이다.
free(x)는 leak한 garbage memory를 해제한다.

 


Memcheck, a memory error detector

HEAP SUMMARY:
    in use at exit: 0 bhytes in 0 blocks
  total heap usage : 1 allocs, a frees, 4 bytes allocated

All heap blocks were freed — no leaks are possible

 

 

 



swap
파란 물 유리잔. 빨간 물 유리잔. 빈 유리잔.
유리잔에 담긴 파란 물과 빨간 물을 바꾸기 위해서는 빈 유리잔이 필요하다.
교체할 때에는 빈 유리잔에 파란 물 혹은 빨간 물이 차지만
교체한 후에는 빈 유리잔은 다시 빈 유리잔이 된다.
tmp라는 제3의 변수를 메모리에 할당해야 한다.

 


machin code
-------------
globals
-------------
heap

....

stack

function을 호출하면 
stack space에 변수를 저장한다.

 


copy x와 y를 만들지 않고 swap할 수 있을까?
변수 x와 y의 주소(0x123, 0x127)에 임시 메모리 a와 b를 만들어 바로 swap한다.


#include <stdio.h>

void swap(int *a, int *b);

int main(void)
{
    int x = 1;
    int y = 2;

    printf("x is %i, y is %i\n", x, y);
    swap(&x, &y);
    printf("x is %i, y is %i\n", x, y);
}

void swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}


a와 b를 각각 x와 y를 가리키는 포인터로 지정한다.
이를하지 않으면 a와 x, b와 y는 그 안에서도 서로 다른 위치에 저장된 변수일뿐
서로에게 아무런 영향도 끼치지 않는다.



 


file I/O
fopen 함수에서 r은 읽기, w는 쓰기, a는 덧붙이기 모드를 불러온다.
fclose 함수로 작업을 종료한다.

 

copy file
file을 열고 while문을 통해 모든 byte를 iterate하고 마지막에 file을 닫는다.

 

 

 

 

 

 

Image Enhancement

 

Enhance

화질 개선의 방법으로 점 처리와 영역 처리가 있다.

pixel을 산술적 or 논리적 방법에 의해 변환하는 것을 말한다.


Bitmap
0과 1로 이루어진 네모 pixel의 조합으로 그려지는 이미지 표현 방식이다.

이미지 크기를 늘리거나 줄이면 화질이 손상된다.

 

Vector

특정한 형태를 수학적 함수로 나타낸다.

적은 데이터 용량으로 이미지 구현이 가능하고 확대나 축소 시에 화질이 유지가 된다.

하지만 복잡한 이미지를 나타낼 수 없어 간단한 도형이나 로고를 그린다.

 

JPEG
읽어들인 각 바이트가 각각 0xFF, 0xD8, 0xFF 인지를 확인하면
JPEG 형식의 파일이다.





강의 자료

 

Week 4 - CS50

Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, r

cs50.harvard.edu

 

 

 

 

CS50 Sandbox 

 

CS50 Sandbox

Temporary programming environments for students and teachers.

sandbox.cs50.io

 

 

 

 

Binky Pointer Fun Video C (High Quality 640x560)

 

 

 

 

CSI Zoom Enhance

 

 

 

 

Futurama Let's Enhance 

 

 

 

 

xkcd : pointers

 

Pointers

This work is licensed under a Creative Commons Attribution-NonCommercial 2.5 License. This means you're free to copy and share these comics (but not to sell them). More details.

xkcd.com

 

 

 

 

화질 개선 (Image Enhancement) (Naver Blog bluespace의 블로그)

 

화질 개선 (Image Enhancement)

화질 개선에 대한 2가지 점 처리와 영역 처리가 있다. 점 처리 (Point Processing) pixel을 산술적 or 논...

blog.naver.com

 
 
 

비트맵과 벡터 (Tistory Blog On a rainy day)

 

비트맵과 벡터

이미지를 디지털화하는 두 가지 방식 비트맵 VS 벡터 이미지를 디지털화하는 방법은 크게, 전체 그림을 미세한 화소(pixel)로 분해, 각 화소의 색상과 위치를 기록해 저장한 비트맵 방식과 그림을

iyagi.tistory.com

 









>