2024/04/11 3

L-value, R-value

L-value와 R-value는 copy, move와 관련이 있다. 주소값을 가지고 있는 친구는 L-value이다. 즉 L-value는 callable한 변수, R-value는 한번 쓰고 다시 안쓰는 변수를 말한다. int a = 3; a = b; 여기서 a,b는 L-value, 3은 R-value라고 생각하면 편하다. 좌측값 참조자는 &, 우측값 참조자는 &&이다. 한번쓰고 버려질 것이면 copy보단, move가 적절하게 사용할 것이고, callable한 것은 copy가 더 적절할 것이다. 이를 vector를 예시로 하게된다면 void push_back (const T& value); void push_back (T&& value); 좌측값 참조를 사용하게 된다면, stack에 가리키는 주소의 메모리가..

구조체 바이트 패딩 규칙

단순 클라이언트의 작업만을 생각했을 땐 구조체 혹은 클래스의 순서를 중요하게 생각하지 않았었다. 하지만 서버에서는 구조체, 클래스의 패딩 규칙이 중요하다 이에 따라서 구조체 전체 크기가 달라지기도 하기 때문이다. 구조체를 이용하여 새로운 자료형을 정의하여 사용할 때, 정의된 자료형은 컴파일러에 의해 데이터로 변환되고, 이어서 메모리에 저장된다. 컴퓨터 프로세서가 메모리에 '어떤 방식'으로 접근하여 데이터를 읽어가고 컴파일러가 프로그램 코드를 '어떤 규칙'으로 데이터로 변환하는지를 확인하여 보자 이를 통해, 처리속도가 빠르고 효율적으로 메모리를 사용하는 자료형을 구성할 수 있을 것이다. 1. 빈 구조체 혹은 클래스는 4바이트의 메모리 공간을 차지하게 된다. 2. 먼저 나열한 순서 대로 메모리 공간을 순차적..