구조체
[C++] 구조체 바이트 패딩 규칙 코드 (structure byte padding or align rule)
1. Unless overridden with __declspec(align(#)), the alignment of a scalar structure member is the minimum of its size and the current packing."__declspec(align(#))을 오버라이드 하지 않으면, 스칼라 구조체(long, bool과 같은 일반 변수로만 이루어진 구조체)의 멤버는 변수의 사이즈와 현재 지정된 byte padding align을 따른다." bool과 long으로만 이루어진 각 구조체의 사이즈는 1 byte, 4 byte와 같이 각각의 멤버 사이즈대로 align 되었다.struct Size_1_Align{ bool b;};struct Size_4_Alig..
[C#] 구조체 (struct)로 메모리 절약하기
메모리의 타입(유형) 스택(Stack) 스택은 매우 단순하고 균일한 방식으로 할당되는 연속적인 메모리 영역이다. 메모리는 스택의 하위 메모리 주소에서 상위 메모리 주소로 할당 된다. 가장 최근에 할당된 메모리만 해제 할 수 있으며, 당연히 스택 맨 아래에 할당 된(먼저 할당 된) 메모리를 해제하려면 위에 할당된 메모리를 모두 해제해야만 한다. 스택에 할당 되지 않은 메모리는 단순한 메모리 포인터로 추적된다. 스택 영역에 메모리가 할당 되면 포인터가 적절한 양만큼 위로 이동한다. 반대로 메모리가 해제되면 포인터가 다시 아래로 이동한다. 실제 스택 영역에서 메모리가 해제 된다고 하더라도 메모리에 저장되어 있는 값을 지우는 것이 아닌 단순히 포인터만 이동하고, 해당 메모리는 필요 할 때 덮어 쓰여지게 된다. ..

[React] 다양한 방법으로 Hello World 띄우기
App.jsx 파일 내 수정 import * as React from 'react'; const title = 'World'; function App() { return ( Hello {title} ); } export default App; 검색창 띄우기 import * as React from 'react'; const title = 'World'; function App() { return ( Hello {title} // 여긴 검색창 띄우기 용도 Search: ); } export default App; 리액트 구조) 코드 > 내부 작업 > 브라우저에 띄 아래는 구조체 사용 import * as React from 'react'; const welcome = { greeting: 'Hey', ti..

C++ struct(구조체), union(공용체) 크기에 대한 정리
1. struct Struct(구조체)는 구조체 멤버중 가장 큰 변수의 크기를값을 기준으로 잡고 기준값의 크기에 나머지 변수를 순서대로 차곡 차곡 배치하여 구조체의 전체 크기가 결정 된다. 아래의 예시 코드를 보자. typedef struct test{ int a; long c; char b; char d:1, //d:1의 의미는 char d를 1bit 의 크기로 계산하고 사용한다는 의미 e:1, f:1, g:2, i:1, k:1; long h; } test; int main(void) { test k; k.g=1; // printf("a:%d \n",k.g); printf("size : %d\n",sizeof(k)); return 0; } 구조체 형태 도식화 (long 은 64bit 운영체제에서 8by..
구조체 또는 클래스 관련 정렬 (sort 함수)
구조체 또는 클래스는 항상 연산자 오버로딩을 해줘야하고 클래스명으로 가야한다. struct Student { int id, pow; char team; Student(int a, char b, int c) : id(a),team(b),pow(c) { } bool operator(const Student& b) const { return pow > b.pow; } }; 여기서 pow 기준으로 정렬할텐데 이때 algorithm 헤더파일 내에 sort 함수를 사용하고 pred 인자로 해당 연산자 오버로딩 함수를 보내주면 된다. 디폴트 값 : less(); vector st; // pred 템플릿 인자로 무조건 클래스명으로 줘야한다. sort(st.begin(), st.end(), greater()); less..
C# 구조체가 IEquatable<T>를 상속해야 하는 이유
C#의 모든 타입의 최상위 클래스인 Object에는 .Equals(object) 메소드가 존재한다. 그리고 이를 통해 다른 값과의 동일 비교를 수행할 수 있다. 구조체나 클래스를 직접 정의하고, 해당 객체로 .Equals(object)를 호출하면 object.Equals(object)가 호출된다. 박싱 int a = 1; object oa = a; Value Type을 object 타입으로 캐스팅하면 박싱이 일어난다. IL_0001: ldc.i4.1 IL_0002: stloc.0 IL_0003: ldloc.0 IL_0004: box [mscorlib]System.Int32 IL_0009: stloc.1 디스어셈블러를 통해 CIL 코드를 열어보면 위와 같이 확인할 수 있다. .Equals(object)에서..

C# 구조체 (struct) 클래스 (class) 차이
struct 코드 struct Point { public int X; public int Y; public int Z; public Point(int x, int y, int z) { this.X = x; this.Y = y; this.Z = z; } public static Point operator +(Point p1, Point p2) { return new Point(p1.X + p2.X, p1.Y + p2.Y, p1.Z + p2.Z); } public String toString() { return "x: " + X + ", y: " + Y + ", z: " + Z; } } class 코드 class Point { public int X; public int Y; public int Z; pub..
C++ 유니폼 초기화와 생성자
C++11에 유니폼 초기화가 추가되었다. {}를 이용한 초기화여서 Brace-Initialization 이라고도 부른다. struct A { int x, y; }; class B { public: B(int x, int y) : mX(x), mY(y) {} private: int mX, mY; }; A a = {10, 20};// {} B b(10, 20);// () int c[4] = {1, 2, 3, 4};// {} C++11에서는 이 부분을 모두 {}를 이용하는 유니폼 초기화로 문법을 통일시켰다, =을 붙이거나 붙이지 않거나 모두 유니폼 초기화를 사용할 수 있다. A a1 = {10, 20}; B b1 = {10, 20}; A a2{10, 20}; B b2{10, 20}; 유니폼 초기화는 일반 자료..