함수 호출 규약Calling Convention, 해석하면 '함수 호출 규약' 이란 어떤 함수를 호출 할 때, 그 함수의 파라미터(인자)를 어떤 방식으로 전달하는가에 대한 하나의 약속이다.함수를 호출 할 때, 프로세스에 정의되어있는 스택 메모리 공간을 이용해서 파라미터를 함수로 전달하게 되고, 이 스택 메모리 공간은 프로세스가 실행 될 때에 해당 PE헤더에 스택 메모리의 크기가 명시되어 있다. 스택에 저장되는 값들은 임시적인 값들이기 때문에 더이상 사용하지 않더라도 값을 지우거나 하지 않는다, 굳이 지우려고 하지 않더라도 스택에 다른 값을 입력할 때 저절로 덮어 쓰기 때문에 불필요한 CPU 자원 소모의 낭비를 막기 위해서 그대로 내버려 둔다.주요한 함수 호출 규약cdeclstdcallfastcallcde..
★KEYWORD★메모리 관련 3가지 주요 특성인 용량, 접근, 속도, 비용 간의 절충관계를 파악해 필요에 따라 채택할 수 있게 나타낸 구조 / 레지스터, 캐시 : CPU 내부에 존재하고 CPU 빠르게 접근 가능 / 메모리 : CPU 외부에 존재하고 CPU 느리게 접근 / 하드 디스크 : CPU 직접 접근 불가하고 데이터를 메모리로 이동시켜 접근 가능하지만 아주 느림 메모리 계층 구조(Memory Hierachy)메모리를 필요에 따라 여러 가지 종류로 나누어 둠을 의미한다. 이때 필요한 대부분의 경우 CPU가 메모리에 더 빨리 접근하기 위함이다. 메모리 계층 구조를 바탕으로 컴퓨터의 설계에 있어 상황에 맞게 여러 장치를 각각의 역할이나 특징을 기반으로 사용할 수 있도록 하여 최적의 효율을 낼 수 있도록 한..
구조체 패딩구조체 멤버변수들을 메모리에서 CPU로 읽을 각 시스템의 워드(word) 경계에서 읽어오는 것이 효율적이기 때문에 컴파일러가 (성능상의 이유로)레지스터의 블록에 맞춰 최적화 하는 작업이다.123456789101112131415161718192021222324#include iostream>using namespace std; struct Ex1{ // int = 4byte, double = 8byte int x, y, z; double d; int f;}; struct Ex2{ int x, y, z, f; double d;}; int main(){ cout sizeof(Ex1) endl; // 32 cout sizeof(Ex2) endl;..
union (공용체) 서로 다른 데이터형을 한 번에 한 가지만 보관할 수 있는 데이터 형식(구조체는 int형과 double형을 한꺼번에 보관할 수 있지만, 공용체는 int형이나 double형 중에서 한 번에 어느 하나만 보관할 수 있음)구조체(struct)와 거의 동일하지만 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 점이 다르다. 즉, 공용체(union)는 내부에 여러가지 타입의 멤버 변수를 선언하지만 실제 사용할 때에는 하나의 멤버 변수만 사용할 수 있다. 특징한 번에 하나의 값만 보관할 수 있으므로, 가장 큰 멤버를 보관할 수 있을 만큼의 공간이 필요하다. (따라서 공용체의 크기는 가장 큰 멤버의 크기가 됨)멤버 변수끼리 같은 메모리 공간을 공유하기 때문에 각 멤버들의 메모리 시작 주소가 동일..
★KEYWORD★플린 분류 : 컴퓨터 구조 분류 / 명령어와 데이터 입력의 개수에 따라 구분 / SISD / SIMD / MISD / MIMD플린 분류 (Flynn's taxonomy)스탠퍼드 대학교의 전기공학과 교수인 마이클 J. 플린이 1966년에 제안한 컴퓨터 구조 분류이다.명령어(Instruction)와 데이터 입력(Data stream)의 개수에 따라 구분한다.분류플린이 정의한 네 가지 분류는 아키텍처에서 사용 가능한 동시 명령어 수 또는 데이터 스트림에 기초한다.SISD(Single Instruction, Single Data stream)SIMD(Single Instruction, Multiple Data streams)MISD(Multiple Instruction, Single Data s..
Dynamic Cast동적으로 형변환시키고, 형변환에 실패할 경우 nullptr를 리턴한다.부모 클래스의 포인터에서 자식 클래스의 포인터로 다운 캐스팅 해주는 연산자이다.class의 상속관계에서 형변환을 프로그래머가 올바르게 하도록 도와주는 기능을 제공한다.Dynamic Cast 사용 제약 사항상속 관계 안에서만 사용 가능하나 이상의 가상함수를 가지고 있어야 함 사용법dynamic_cast (변환할 내용)dynamic_cast(temp); 예제12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455#include stdio.h> class Test_ClassA{public: ..