일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴공
- cs
- 오퍼레이팅시스템
- 문제풀이
- 북리뷰
- 컴퓨터공학과
- bfs
- 정석
- Operating System
- 정석학술정보관
- DP
- 브루트포스
- vector
- coding
- Stack
- 구현
- 코테
- OS
- 그래프
- 알고리즘
- Computer science
- 개발
- 너비우선탐색
- 컴공과
- 자료구조
- c++
- 오에스
- 코딩
- 백준
- 스택
- Today
- Total
목록Univ/System Programming (18)
Little Jay

Data Size 먼저 앞서서 간단하게 살펴본 Data Size를 짚고 넘어가자. b: 1Byte - Byte w: 2Byte - Word l: 4Byte - Double word q: 8Byte - Quad word assembly 코드를 읽을 때 이 suffix를 잘 파악해야 몇 바이트 단위로 끊어서 해석해야하는지 알 수 있기 때문에 이를 잘 숙지해야한다. Mov Instruction 이전 포스팅에서 간단하게 mov instruction에 대해서 언급했었는데 이를 조금 더 자세히 살펴보고자 한다. mov가 그러하듯 다른 instruction에서 suffix로 Data Size를 붙이게 되면 그 만큼의 Data를 저장할 수 있다. 하지만 또 때에 따라서는 이 Data Size를 생략하고 쓸 수 있기 때..

Instruction Machine Instruction은 Opcode와 Operands로 이루어져 있다. Opcode는 실제 오퍼레이션의 타입을 명시해놓은 것이다. 이 Opcode를 통해 메모리 사이의 데이터 교환이 레지스터에서 가능해지며 Opcode를 보고 레지스터나 메모리에서 산술연산이 이루어진다. Opcode에는 mov, add, jmp 같은 operation들이 있다. Operands는 Opcode의 피연산자이다. 여기에 in/output 데이터와 위치들의 정보가 담겨있다. Register 레지스터에 대한 얘기를 잠깐 하고 넘어가면, 먼저 레지스터에 대한 정의는 아래와 같다. 레지스터는 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소이다. 일반적으로 현재 계산을 수행중인 값을 저장..

구조체(Sturcture) 구조체는 간단하게 말해서 기본 데이터 타입들을 가지고 새롭게 사용자가 정의할 수 있는 타입이다. 기본타입뿐만 아니라 복잡한 타입들을 묶어 구조체로 선언할 수 있다. 조금 더 자세히 설명을 하자면, 구조체는 객체를 그룹화하는 데이터 형식을 생성할 수 있다. 서로 다른 유형을 단일 객체로 그룹화 시킨다. 구조체의 다른 구성요소는 이름으로 참조될 수 있는 것이다. 구조체의 구현은 구조체의 모든 구성 요소가 메모리의 연속적인 영역에 저장되고, 구조체에 대한 포인터가 첫 번째 바이트의 주소라는 점에서 배열의 구현과 유사하다고 할 수 있다. 컴파일러는 각 필드의 바이트 오프셋을 나타내는 각 구조 유형에 대한 정보를 관리하게 되는데, 이러한 오프셋을 참조 명령어의 변위로 사용하여 구조 요소..

배열을 경험해보지 못한 개발자는 없을 것이다. 배열은 컴퓨터 내에서 연속적인 메모리 공간을 사용할 수 있는 좋은 자료구조이다. T arr[n] 이라는 배열이 있으면, 이는 T라는 자료형에 n길이 만큼 data가 있다는 소리이다. 이때 이 size는 n * sizeof(T) 만큼의 메모리 공간에 연속적으로(Continously) 존재하게 된다. 그리고 arr이라는 이름은 배열의 시작을 가르키는 포인터처럼 사용할 수 있다. char buf[256]; 이라고 선언 후, char *p = buf; 라는 포인터변수를 선언하면 단순히 이 포인터를 가지고서 배열을 다룰 수 있는 것이다. 보통 리눅스 계열에서 포인터는 일반적으로 8byte를 가리키며, n length의 포인터 배열을 선언하게 되면 n * 8의 사이즈의..

지난 포스팅에 이어 이번에는 실수자료형에 대한 이야기를 해보고자 한다. 세상은 정수로만 이루어 진 것이 아니며, 당연하게도 실수형을 가진다. 예를 들어 3.141592...... 이런 수들을 실수라고 한다. 이러한 실수는 특히 과학 분야에서는 이 소수점 표현들이 중요해진다. (유효범위때문에 물리학 성적 읍읍......) Fixed Point Representation 실수 자료형에는 floats, double 등이 있다. 이러한 자료형을 표현하는 것을 Fixed Point Representation이라고 부른다. 우리는 항상 bit를 사용할 때 2진수 체계를 사용하며, 이는 당연하게도 소수점을 표기할 때도 동일하게 적용이 된다. 2의 -1승은 1/2이고 이렇게 해서 2의 거듭제곱의 표현으로 표현이 가능하..

앞에서 정수가 어떻게 저장이 되는지 확인했으니, 이제 실제 메모리로 들어가 볼 차례이다. Bytes Representation 12345라는 숫자가 있으면 이는 hex로 3039, binary로 0011 0000 0011 1001로 들어갈 것이다. 아래의 코딩 결과처럼 little endian형식으로 들어간 것을 볼 수 있다. Expansion(aka Casting) 일반적으로 casting을 할때 자주 표현되는 warning들이 있다. warning C4305: '초기화 중': 'double'에서 'float'(으)로 잘립니다. 이런 종류의 C4305에러가 발생을 하는데, 이는 형변환에서 데이터가 잘리기 때문에 발생한다. 이런 종류의 에러는 크기가 작은 데이터에서 큰 데이터로 옮겨갈 때 문제가 되지 않..

Byte Ordering 우리는 먼저 메모리에 bytes들이 어떻게 저장이 되는지 알아보자. 통상적으로 우리가 글을 읽을 때는 죄에서 우로 글을 읽는다. 반면, 아랍에서는 우에서 좌로 글을 읽는다. (하지만 아랍어 몰랐어도 풀 수 있는 문제들......) 이렇듯 국가별로 글을 읽는 방식이 다른데, 컴퓨터도 이와 마찬가지로 메모리 주소를 읽는 방식이 다르다. 컴퓨터 즉, HW에서 저장되는 데이터의 최소 단위는 1byte, 즉 8bit이다. 모든 기계적인 하드웨어에서 멀티-바이트의 객체들은 연속적인 바이트의 시퀸스(contiguous sequence of bytes)로 저장이 된다. 예를들어 int x가 있고 32bit 컴퓨터에서 0x100번지부터 시작된다고 가정을 해보자. 그러면 이 x라는 변수는 4byt..

앞서 설명을 진행하기 위해 우선적으로 2의 보수 체계를 이해할 필요가 있다. 컴퓨터는 이진수로 모든 데이터를 저장한다. 그러면 0과 음수를 어떻게 저장해야 할까? 일반적으로 생각했을 때 Sign Magnitude Representation(부호 절대값) 방식이 있다. 이는 맨 앞의 이진수를 부호로서 사용하는 것이다. 예를 들어 0000 = 0 0001 = 1 0010 = 2 1000 = 0 1001 = -1 1010 = -2 이런식으로 말이다. 이를 도식화 하면 아래와 같이 쓸 수 있다. 이 방식이 좋은 점: 표현 하기에 너무나 간편하다 직관적으로 10진수로 변환하기 쉽다 그러나 이 방식도 문제가 있는데, 0을 표현할때 0000, 1000 이렇게 두 가지의 표현이 나오게 된다. 연산이 복잡해진다. 예를들..