목록Language (73)
Coding Memo
C++에서 출력을 표처럼 간격에 맞춰서 깔끔하게 출력하고 싶다. double이나 float 타입의 숫자를 특정 자릿수까지 출력하고 싶다. 특정 숫자를 16진수, 8진수로 바로 출력하고 싶다. double을 출력했는데 자릿수가 얼마 안나온다. ... int main() { double pi = 3.1415926535; cout
Summary SetMinThreads로 Worker Thread의 최소 수를 지정할 때는 SetMaxThreads로 최대 수도 함께 지정해주어야 한다. (그 역도 마찬가지이다.) 그렇지 않으면 System의 default 값이 적용된다. 코드를 테스트하다가 우연히 알게 되었다. SetMaxThreads로 worker 쓰레드 수를 한정하고 초과 개수의 쓰레드를 돌려도 잘 돌아가는 현상을 보고 ‘뭐지…’ 하고 한참을 찾아보고 테스트 해보다가 해결했다. using System; using System.Threading; namespace Test { class Program { static void Main(string[] args) { ThreadPool.SetMinThreads(1, 1); ThreadP..
Summary 자료형에 따라 call by reference 인지, call by value인지 결정되는데, 직접 전달 방식을 정할 수도 있다. call by value: 값을 복사하여 사용 call by reference: 값을 참조하여 사용 Value Type: 기본 자료형 (int, float, char), struct, … Reference Type: Class (string …), Action, … Variable Data Type Call By 매개변수에서 참조하는 개체 상태 수정 - 호출자 표시 여부 매개 변수에 다른 객체를 참조하여 할당 - 호출자 표시 여부 Value value X X reference (ref) O X Reference value O X reference (ref) O ..
매개 변수 앞에 한정자를 붙여 전달 방식을 지정할 수 있다. ref 인수 할당 필요, 매개 변수를 다른 개체로 재할당 가능 in 인수 할당 필요, read only out 인수 할당이 필수가 아님, 대신 호출된 메서드에서는 이 매개 변수에 값을 반드시 할당 해야함 params: 매개 변수의 개수를 가변으로 지정 ex) int Add(params int[] nums) out은 Try~~(out ~~) 함수를 생각하면 이해하기 편할 것이다. ex) TryGetValue(), TryGetComponent() … ref는 C의 포인터나 참조로 생각하면 쉽다. out은 C언어 함수에서 값을 할당하는 인자로 생각하면 쉬울거 같은데 값 할당이 필수가 아닌 C와 달리 C#에서는 out 키워드가 있으면 반들시 값을 할당..
변수에 넣는 값을 리터럴이라고 한다. (= 메모리에 저장되는 값) int a = 1; 위 코드에서 리터럴은 1이 된다. C++ 에서의 여러가지 타입에 대한 리터럴 표기법 * 1를 표시한다고 했을 때, 형식 리터럴 int 1 unsigned int 1u long 1l unsigned long 1ul double 1.0 float 1.0f long double 1.0l 이 외에도 2진수, 8진수, 16진수 표기법이 각각 따로 있다. (2진수는 C++11 부터) 형식 접두사 예시 2진수 0b, 0B 0b1110 8진수 0 015 16진수 0x, 0X 0XAABB00 주의: 접두사 이후에 나오는 숫자나 문자는 당연히 해당 형식에 포함된 숫자나 문자여야 한다! (아니면 오류가 날 것이다.) Tip : 조금 긴 숫..
C++에서 자신이 사용할 클래스를 템플릿화 시켜서 코드를 작성했다고 하자. 다음과 같은 코드가 있다. (별 의미가 없는 클래스이다) #pragma once template class MyData { public: int size() { return _data.size(); } void addData(T t) { _data.push_back(t); } vector data() { return _data; } private: vector _data; }; 이 클래스를 main함수가 포함되어 있는 파일에 추가하거나 다음과 같이 헤더파일을 include하여 main에서 사용하면 문제가 없다. 오류 없이 '10'이 제대로 출력되고 프로그램이 종료될 것이다. #include "MyData.h" int main() ..
Rockiss님의 게임 서버 강의에서 학습한 내용과 몇몇 인터넷 검색을 통해 정리하였다. Select WSAAsyncSelect WSAEventSelect Overlapped (event) Overlapped (callback) IOCP Async/Sync IO Sync IO Sync IO Sync IO Async IO Async IO Async IO Select Pros - 윈도우 뿐만 아니라 Linux 계열에서도 사용이 가능함 (이식성 우수) Cons - 호환성이 높은 만큼 성능이 다른 모델 보다 좋지 않음 (매번 fd_set 등록 필요) - 한번에 64개의 소켓까지 사용 가능 (FD_SETSIZE = 64) Methods 1. fd_set 초기화 (FD_ZERO) 2. socket 등록 (FD_SE..
이전 글: https://minttea25.tistory.com/68 volatile 변수 본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. 변수를 선언 할 때, 타입 앞에 volatile을 붙여서 선언할 수 있다. volatile 변수는 C/C++ 만 아니라 Java 등의 minttea25.tistory.com volatile 변수는 컴파일 시 최적화를 진행하지 않기 때문에 매번 값을 읽고 쓰기 위해 메모리에 접근하는 과정을 포함한다. 이전 글에서는 크게 문제가 될만한 사항이 없는 예제들에 대해서 작성하였지만 이번 글에서는 쓰레드에서 치명적인 문제가 발생할 수 있는 예시들에 작성하였다. 컴파일 최적화에서 어떤 변수에 대해 이 변수가 다른 쓰레드에서 사용을 하..