반응형
함수 호출 규약 (Calling Convention)
PROGRAMMING/04. C++2024. 4. 26. 10:29함수 호출 규약 (Calling Convention)

함수 호출 규약Calling Convention, 해석하면 '함수 호출 규약' 이란 어떤 함수를 호출 할 때, 그 함수의 파라미터(인자)를 어떤 방식으로 전달하는가에 대한 하나의 약속이다.함수를 호출 할 때, 프로세스에 정의되어있는 스택 메모리 공간을 이용해서 파라미터를 함수로 전달하게 되고, 이 스택 메모리 공간은 프로세스가 실행 될 때에 해당 PE헤더에 스택 메모리의 크기가 명시되어 있다. 스택에 저장되는 값들은 임시적인 값들이기 때문에 더이상 사용하지 않더라도 값을 지우거나 하지 않는다, 굳이 지우려고 하지 않더라도 스택에 다른 값을 입력할 때 저절로 덮어 쓰기 때문에 불필요한 CPU 자원 소모의 낭비를 막기 위해서 그대로 내버려 둔다.주요한 함수 호출 규약cdeclstdcallfastcallcde..

[C++] 구조체 패딩
PROGRAMMING/04. C++2024. 4. 26. 09:50[C++] 구조체 패딩

구조체 패딩구조체 멤버변수들을 메모리에서 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;..

[C++] union (공용체)
PROGRAMMING/04. C++2024. 4. 25. 13:03[C++] union (공용체)

union (공용체) 서로 다른 데이터형을 한 번에 한 가지만 보관할 수 있는 데이터 형식(구조체는 int형과 double형을 한꺼번에 보관할 수 있지만, 공용체는 int형이나 double형 중에서 한 번에 어느 하나만 보관할 수 있음)구조체(struct)와 거의 동일하지만 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 점이 다르다. 즉, 공용체(union)는 내부에 여러가지 타입의 멤버 변수를 선언하지만 실제 사용할 때에는 하나의 멤버 변수만 사용할 수 있다. 특징한 번에 하나의 값만 보관할 수 있으므로, 가장 큰 멤버를 보관할 수 있을 만큼의 공간이 필요하다. (따라서 공용체의 크기는 가장 큰 멤버의 크기가 됨)멤버 변수끼리 같은 메모리 공간을 공유하기 때문에 각 멤버들의 메모리 시작 주소가 동일..

[C++] Dynamic Cast (타입 캐스트 연산자)
PROGRAMMING/04. C++2024. 4. 24. 13:47[C++] Dynamic Cast (타입 캐스트 연산자)

Dynamic Cast동적으로 형변환시키고, 형변환에 실패할 경우 nullptr를 리턴한다.부모 클래스의 포인터에서 자식 클래스의 포인터로 다운 캐스팅 해주는 연산자이다.class의 상속관계에서 형변환을 프로그래머가 올바르게 하도록 도와주는 기능을 제공한다.Dynamic Cast 사용 제약 사항상속 관계 안에서만 사용 가능하나 이상의 가상함수를 가지고 있어야 함 사용법dynamic_cast (변환할 내용)dynamic_cast(temp); 예제12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455#include stdio.h> class Test_ClassA{public:   ..

[C++] Lambda
PROGRAMMING/04. C++2024. 4. 24. 13:33[C++] Lambda

Lambda람다 함수는 아래와 같이 대괄호[], 소괄호(), 중괄호{}, 소괄호() 이런 모양으로 생겼다.(여기서 생략이 가능한 건 소괄호들) [] ( ) {  } ( )[캡처] (매개변수) { 함수 동작 } (호출인자)첫 번째 [] : 캡처두 번째 () : 매개변수 선언 부분 (생략 가능 - 매개변수 필요 없을 때)세 번째 {} : 함수 동작 부분네 번째 () : 함수 호출 시 인자 (생략 가능 - 호출 시에만 사용)람다 캡쳐람다에서는 [ ] ➡️ 이 대괄호 모양을 캡처라고 한다.캡처는 람다 외부에 정의되어있는 변수나 상수를 람다 내부에서 사용하기 위해서 사용한다. 캡쳐의 방식참조로 캡처 ➡️ &변수이름복사로 캡처 ➡️ 변수이름모든 외부 변수에 대해 참조 ➡️ [&]모든 외부 변수에 대해 복사➡️ [=..

[C++] Static (정적 변수)
PROGRAMMING/04. C++2024. 4. 24. 08:55[C++] Static (정적 변수)

Static (정적 변수)모든 객체가 한 메모리를 공유하는 멤버 변수이다.객체 별로 각각 할당되는 멤버가 아니라 모든 객체가 공유하는 멤버다.메모리는 프로그램 시작 때부터 차지하고 있으며 메모리에 내내 값이 유지된다.static 변수는 데이터(Data)영역에 저장되어 함수가 종료되더라도 프로그램이 종료되지 않는 이상 메모리상에 남아있다.객체 생성 전에 반드시 전역 범위에서 미리 초기화해 주어야 한다.객체 이름으로도 접근이 가능하지만 클래스 이름으로도 접근이 가능하다.예제1234567891011121314151617181920212223242526272829303132333435363738#include stdio.h> class Test{public:    static int a; // 선언이므로 메모리..

반응형
image