ved_Rony
article thumbnail
메모리 구조
Programming 2024. 2. 4. 16:15

프로그래밍 관련 자료를 찾아보다가 정말 좋은 글을 보게 되었다. 메모리 구조 관련하여, 정말 자세히 그리고 직관적으로 알수 있게, 직접 프로그램을 돌려보고 나온 결과와 시각 자료를 적절하게 넣어서 메모리 구조에 관해서 비교적 쉽게 이해를 할 수 있었다. 바로 이 글인데 https://st-lab.tistory.com/198 메모리 구조 [Memory Structure]안녕하세요. 오늘은 제목에서 밝혔듯 메모리 구조에 대해 알아보려 합니다. 흔히 메모리라고 하면 RAM을 지칭하는데요, 보통 컴퓨터 구조에 대해 학습하시거나 배우셨던 분들은 알겠지만 메모리st-lab.tistory.com이 글을 보고, 공부 한 것을 발췌, 요약을 할 것이다. 일단, 컴퓨터에 데어터 저장 공간은 크게 하드디스크, 메모리(ram..

비동기 프로그래밍 - aync void를 지양하자 + (UniTaskVoid는?)
Programming/C# 2023. 12. 1. 15:36

제목에서 알수 있듯이, 비동기 프로그래밍을 짤 때, async void는 지양하는 것이 좋다. 그이유로는 에러 처리에 있어서 예상치 못한 문제를 야기 할수가 있어서 그렇다. 그렇다면, 이것이 대체 어떻게 우리 프로그램에 영향을 끼치는 것일까. 결론부터 보자면, async void의 execution이 에러를 일으키면 application은 crash된다. 예를 들어보겟다. BackGroundTask task = new(); Debug.Log("hello"); await task.RunTask(); Debug.Log("world"); public class BackGroundTask : Monobehaviour{ public async Task RunTask(){ await Task.Delay(1000);..

article thumbnail
C# - 부동 소수점 오차
Programming/C# 2023. 8. 20. 20:40

게임 개발을 하다보니, 플레이어의 위치, 타이밍, 걸리는 시간 등 정확한 계산을 요하는 일이 많이 생긴다. 특히나 플레이어간의 동기화를 고려하면, 사소한 오차로 클라이언트간의 소통오류로 이어질수가 있다. 그래서 float type을 사용할 때, 조금 더 주의를 해줘야한다. 바로 부동 소수점 오차, 즉, 플로팅 연산 오류가 생길수 있기 때문이다. 간단하게 개념만 이해한다면, float으로 계산을 하다보면, 가끔씩 소수점 하위 부분에서 각 하드웨어(cpu)의 연산 방식, 성능 등에 따라서, 오류가 생기기도 하는 데, 예를 들어, (float type) * (float type) 의 결과 값이 10f가 나와야 한다면, 9.999999999f가 나온다는 것이다. 왜 이런 일이 벌어지는 것일까? 모든 십진수들이 ..

article thumbnail
c++ -> c#인터프리터 정리
Programming/C# 2023. 7. 3. 19:20

c++ 아두이노 언어를 c#으로 변환해주는 인터프리터 이 인터프리터를 가지고 c++를 c#으로 전환해주고, 유니티에서 가상 시뮬레이션을 돌려준다. 먼저, runcode 함수를 실행 → 이때 lexer와 parser를 생성해주는 데 lexer에 전체 코드를 넣어준다. lexer와 parser의 역할은 뒷 내용을 보다보면 이해가 가겠지만, lexer는 코드의 string byte를 token으로 인식하게 해주고, parser는 이 token으로 해석을 시작한다. 이과정에서 AST(추상구문트리)의 노드 구조를 형성하고, 이후에 evaluater에서 이러한 트리구조를 실행해준다. private static async UniTask RunCode(string code) { var lexer = new Lexer(..

Effective C# - item 1 ~ 10
Programming/C# 2022. 10. 3. 15:29

1. 지역변수를 선언 할때는 var가 더 낫다. 그렇다면 var를 무작정 사용하면 타입 선정하는 데 걸리는 시간이 늘어나 컴파일 타임에 악영향을 주는게 아닐까? - 암시적으로 변수를 선언한 코드가 더 잘 읽힌다. ​변수의 의미 자체에 더 집중할 수 있다. 하지만 변수의 타입 정보가 필요할 때, 정확하게 유추할 수 있도록 코드를 짜는 편이 좋다. 예를 들어, JSON object의 경우 타입 자체에 대한 정보가 아닌 그에 담긴 데이터가 중요한경우가 많으므로 var로 선언 해주는 것이 좋다. 또한, 내장 숫자 타입을 리턴하는 메서드의 경우 메서드 이름에 숫자 타입이 적혀있지 않다면 해당 메서드가 출력하는 리턴값의 타입이 어떤 것인지 확신할 수 없다. 따라서 내장 숫자 타입 같은 경우엔 var보다는 명시적으로..

C++ - h-index_프로그래머스 고득점 키트

문제 설명 H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요. 제한사항 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다. 논문별 인용 횟수는 0회 이상 10,000회 이하입니다. 입출력 예 citations ret..

C++ - 가장 큰 수_프로그래머스 고득점 키트

문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. -> 여러가지 방법이 있다. 각 문자열을 더해줘서 숫..

C++ - k번째 수_프로그래머스 고득점 키트

문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 1. 주어진 배열을 주어진 범위로 자르고, 2. 정렬하여. ..

검색 태그