티스토리 뷰

[1] 메모리 주소

- 메모리 주소(&)는 16진수로 표현

- 컴퓨터는 8개의 비트가 모인 바이트 단위로 정보를 표현하는데, 2개의 16진수는 1byte의 2진수로 벼환되기 때문에 정보를 표현하기 매우 유용하다.

ex. 01000001 => 0100 = 4 | 0001= 1 => 0x41

 

* 2진법

128 64 32 16 8 4 2 1

     1  1  1    1 1 1 1 1 

1비트*8개 = 8비트 = 1바이트

1000바이트 = 1KB < MB < GB < TB

 

* ACII, 유니코드

- 아스키코드 : A = 65, 0=48, 1=49, 8비트만 사용

- 유니코드 : 8,16,24,32비트 사용 => 더 많은 패턴 사용 가능

-RGB(발강,초록,파랑) 하나의 픽셀의 색에는 이 3가지 값이 들어감 

 

*생각해보기) CS50을 2진법으로?

아스키코드 10진법 2진법
CS50 67 83 53 48 1000011 1010011 110101 110000

 

 

*트랜지스터 : 컴퓨터 속에 있는 작은 스위치(0과 1, 1에 각각 조금의 전기를 저장)를 물리적으로 이용해서 정보를 표현하고 값을 저장[CS50-2019]

[2] 문자열 : 문자의 배열, 가장 마지막은 \0, 즉 0으로 이루어진 바이트로 문자의 끝을 표시

- 문자열은 문자열을 가리키는 포인터(char *로 표현)이다. 더 상세히는 문자열의 가장 첫번째 문자의 주소를 가리킴.

- 따라서 문자열을 복사할 때는 주소값이 복사 될 수 있으므로 메모리를 할당한 후 값을 복사해야 한다.

 

(1) malloc

int main(void)
{
  char *s = get_String("s: ");
  char *t = malloc(strlen(s))+1); //  메모리를 할당한 후 해당 주소를 반환(널 종단문자 \0 때문에 +1 해줌)

  for (int i=0, n=strlen(s); i<n+1; i++)
  {
       t[i] = s[i]; // 문자열의 각 원소를 복사
   }

  t[0] = toupper(t[0]));

  print("s: %s\n", s);
  print("t: %s\n", t);

  free(t); // 메모리 누수 방지를 위해 할당한 메모리 해제
}

 

(2) 메모리 교환, 스택, 힙

machine code   clang이 컴파일한 0과 1의 값
globals 전역변수
heap
(melloc으로 할당된 메모리의 데이터 저장)
 melloc을 호출하면 메모리를 이 영역에서 가져옴
* melloc을 계속 생성 시키면 heap overflow →메모리 덮어씀
  메모리 너무 많이 써서 오류발생 : 버퍼오버플로우
ex. 인덱스 9까지 있는데 인덱스 10호출
* 함수를 계속 호출하면 stack overflow 발생 가능
stack  
(프로그램 내의 함수 관련 저장)
swap()같은 함수들, 함수들 안의 변수 a,b
main함수, 함수 안의 지역변수

 

※ 출처 :  CS50 - 2019 [네이버부스트코스] https://www.boostcourse.org/cs112/lecture/119038/?isDesc=false

반응형

'AI' 카테고리의 다른 글

[CS50-2019] C언어 총정리-(10) 자료구조  (0) 2024.05.26
[CS50-2019] C언어 총 정리(8) 알고리즘  (0) 2024.05.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함