목록전체 글 (125)
멈추지 않고 끈질기게
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. ※ 해당 포스팅은 C++ 14 버전을 기준으로 작성되었습니다. 이번 포스팅에서는 C++에서 주소를 직접 사용하는 포인터에 대해 알아보겠습니다. 1. 포인터의 정의 포인터는 다른 변수의 주소를 저장하는 변수입니다. 영어에서 Point는 '가리키다'라는 뜻이 있으므로, 포인터는 한마디로 다른 변수를 (주소를 통해)가리키는 변수라고 할 수 있겠습니다. int main() { // 포인터의 선언 및 초기화 int num = 0; int* numPtr = # cout
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 프로세스의 스택 메모리 영역에 대해 알아보겠습니다. 1. 스택 메모리 프로그램이 메모리에 적재되어 프로세스로 실행될 때, 프로세스가 차지하는 메모리 영역은 다음과 같이 구분됩니다. 정적 메모리 영역(컴파일 시점에 크기가 결정) - 코드 영역: 프로그램의 코드(명령어)가 저장되는 영역 - 데이터 영역: 초기화까지 되어있는 전역 변수가 저장되는 영역 - BSS 영역: 초기화 없이 선언만 된 전역 변수가 저장되는 영역 동적 메모리 영역(런타임 중에 메모리 할당) - 힙(Heap) 영역: C++의 malloc, C#의 new 등으로 직접 할당하는 영역 - 스택(Stack) 영역: 지역 변수 등 스택 ..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 레지스터에 값을 저장하는 방식인 엔디안에 대해 알아보겠습니다. 서론 컴퓨터는 데이터를 1바이트 단위로 저장하지만, 실제로 코딩할때 쓰는 데이터들은 1바이트보다 큰 타입이 대부분입니다( 가장 흔하게 쓰는 int형만 해도 4바이트입니다). 따라서 데이터를 저장할 때 여러개의 1바이트로 저장하게 되는데, 이 순서에 따라 빅 엔디안(Big Endian)이나 리틀 엔디안(Little Endian)으로 구분합니다. 이러한 바이트를 저장하는 순서를 바이트 오더(Byte Order)라고 하며, 어떤 바이트 오더를 사용하는지는 CPU(제조사)에 따라 다릅니다. 빅 엔디안(Big Endian) vs 리틀 엔디안..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 공유 자원을 두고 발생하는 교착 상태에 대해 알아보겠습니다.교착 상태(Dead Lock) 지난 포스팅에서 임계 구역에 여러개의 스레드가 접근시 발생할 수 있는 문제와, 이를 막기 위한 뮤텍스 락과 세마포에 대해 알아보았습니다. 이런 수단들을 사용하면 스레드들을 상호 배제시킬수 있지만, 잘못하면 특정 공유자원을 할당받지 못해 계속 대기만 하는 상황이 발생할 수 있습니다. 이렇게 스레드(프로세스)들이 자원 할당을 기다리며 무기한 대기하는 상황을 교착 상태(Dead Lock)라고 합니다. 다음은 C#으로 작성한 교착 상태가 발생하는 예제 코드입니다.class Alpha{ static obj..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. 이번 포스팅에서는 멀티 스레드 환경에서 스레드들을 동기화하는 방법에 대하여 알아보겠습니다. 1. 임계 구역(critical section)과 레이스 컨디션(race condition) 이전 포스팅에서 살펴본 공유 자원에 다수의 스레드가 접근 시 발생하는 문제를 다시 살펴보겠습니다. class Program { static int count = 0; static void Main(string[] args) { Thread t1 = new Thread(Plus); Thread t2 = new Thread(Minus); //스레드 시작 t1.Start(); t2.Start(); //스레드 종료까지 대기 t1.Join..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. ※ 해당 포스팅은 유니티 코리아 공식 유뷰트 계정의 영상을 참고하였습니다. (출처: [유니티 Tips] 알쓸유잡) 이번 포스팅에서는 포워드 렌더링과 디퍼드 렌더링의 차이에 대해 알아보겠습니다. 서문 3D 게임이 발전하면서 그에 따라 라이팅 기법도 발전해왔습니다. 최신 3D 게임들은 광원을 여러종류 사용하여 최대한 사실적인 라이팅을 표현하며, 실시간 라이팅(Realtime Lighting)을 많이 사용합니다. 다만 라이팅을 많이 사용할수록 성능적인 부담도 커지므로, 적합한 라이팅 처리를 위해 포워드 렌더링과 디퍼드 렌더링 방식으로 나뉘게 되었습니다. 포워드 렌더링(Forward Rendering) 포워드 렌더링은..
대입 mov - ex) mov al, 1 (al = 1) / mov al, bl (al = bl) - 값을 대입하는 명령어 사칙연산 add - ex) add al, 1 (al = al + 1) / add al, bl (al = al + bl) - 덧셈 연산 - 피연산자 두개가 모두 메모리값이면 안됨 sub - ex) sub al, 1 (al = al - 1) / sub al, bl (al = al - bl) - 뺄셈 연산 mul - ex) mul bl (bl * al) / mul bx (bx * ax) - 곱셈 연산 - 피연산자와 사이즈에 맞는 a레지스터를 곱함(bl * al, bx * ax) - 1바이트 곱셈의 경우 결과값을 al에 저장 - 2바이트 곱셈의 경우 상위 16비트는 dx에, 하위 16비트는..
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다. ※ 해당 포스팅은 하기 출처들을 참조하였습니다. - 김연희, 데이터베이스 개론, 한빛아카데미, 2022 이번 포스팅에서는 데이터베이스의 기본 개념들에 대해 알아보겠습니다. 1. 데이터와 정보 데이터는 단순히 측정한 값(사실)을 말하며, 정보는 데이터를 가공하여 나온 유의미한 결과물을 의미합니다. 위 사진과 같은 엑셀 시트를 생각해봅시다. 학생들의 이름, 학번, 각종 과목의 점수들이 나열되어 있지만 이것만으로는 무언가 결론을 내기 어렵습니다. 단순한 데이터의 모음이기 때문입니다. 하지만 이 데이터들을 가공하여 정보를 도출해낼 수 있습니다. 예를 들어 수학 점수 기준 내림차순으로 정렬하면 반에서 수학 점수가 높은 ..