태그 보관물: c#

c#

게임에서 작업에 대한 C ++ 작업 경험을 얻는 가장 좋은 방법 (C #에서 제공) [닫기]

저는 몇 가지 다른 언어와 함께 C # (5 년 경험)을 경험 한 소프트웨어 개발자입니다.

저의 “꿈의 직업”은 비디오 게임에서 개발자로 일하고 있습니다.

대부분의 작업에는 현재 가지고 있지 않은 C ++에 대한 지식이 필요합니다 (일부 기본 사항 제외).

주위를 둘러 보았고 대부분의 대형 게임 회사는 3-5 년 동안 C ++에 대한 이전 경험에 따라 무언가를 요구합니다.

내 질문은-C #에서 오는이 필요한 경험 수준에 도달하기에 좋은 경로는 무엇입니까?

가능한 몇 가지 방법을 생각했습니다.

책에서 C ++에 대한 추가 정보를 얻으십시오. C ++로 작성된 오픈 소스 프로젝트에 참여하십시오. 특히 게임 산업에서 C ++을 배우고 실무 경험을 쌓는 가장 좋은 방법은 무엇입니까?



답변

게임 개발자로서 C # 직원을 고용하는 주요 관심사는 저수준 지식이 부족하다는 것입니다.

따라서 작업에 SIMD 명령을 활용하기 위해 클래스의 데이터 레이아웃을 다시 정렬하거나 코드를 다시 작성하는 것과 같은 저수준 최적화가 필요한 프로젝트를 고려하십시오. C ++ 오픈 소스 게임을 통해 최적화하고 이력서에 프레임 속도 증가를 게시하십시오.

인터뷰를한다면 이력서의 C ++에 대한 관심과 C / C ++ / 저급 인터뷰 질문에 답변 할 수 있는지에 대해 더 관심이 있습니다. 문제가있을 수있는 표준 인터뷰 질문에주의를 기울 이겠습니다 (경고 : C # 전문가 아님).

  • C ++ 클래스는 메모리에 어떻게 배치됩니까? 바이트 다이어그램을 그립니다. vtable 포인터와 멤버 변수의 패딩 / 정렬을 포함합니다. 파생 클래스는 어떻습니까? 곱셈 파생 클래스는 어떻습니까?
  • 가상 함수 호출은 낮은 수준에서 어떻게 발생합니까? 메모리에서 값을 읽고 주소로 점프하는 것과 같은 어셈블리 작업에 대해 이야기하십시오.
  • 다양한 상속 관계를 가진 유형에 대한 포인터 사이의 C 스타일 캐스트, static_cast 및 dynamic_cast에 대해 알고 있습니다. 예를 들어, 클래스 B와 C는 모두 클래스 A에서 파생됩니다. 이러한 다양한 캐스트를 사용하여 A *에서 B * (또는 B *에서 C *)로 캐스트하려고하면 어떻게됩니까? (C #이 이러한 특정 캐스트를 허용하지 않을 것이라고 생각하기 때문에 언급했습니다.)
  • stl 벡터를 참조 대신 값으로 전달하는 것이 왜 끔찍한가요? (C #의 대부분의 유형은 참조 유형이므로 C #에서 이러한 종류의 실수를하는 것은 기본적으로 불가능하기 때문에 언급합니다.)
  • 구조 나 함수가 캐시 친화적이라는 것은 무엇을 의미합니까? 배열 구조가 배열 배열보다 성능이 우수한 이유는 무엇입니까?
  • 힙, 스택 및 정적 메모리를 이해하십시오. 객체가 새 객체로 할당 된 경우 프로세스 메모리에서 어디에 있습니까? 지역 변수는 어떻습니까? 글로벌 변수?
  • 메모리 누수 란 무엇입니까? 이를 피하기위한 모범 사례는 무엇입니까? ( C # 에는 삭제 가 없기 때문에 언급했습니다 !)
  • 메모리 액세스 위반 충돌을 어떻게 디버그합니까? 소스 코드가없는 미들웨어 라이브러리에서 충돌이 발생한 경우는 어떻습니까?

답변

에릭이 말한 것. 또한 “새로운”것이 필요하지 않은 곳에 피하기 위해 추가 할 것입니다. C #에서는 매우 일반적이지만 C ++ 11에서는 나쁜 습관으로 간주되며 스택 할당보다 느리고 수동으로 할당을 해제해야하기 때문에 더 위험합니다.

나는 또한 오래된 책에주의를 기울이고, 그들은 오래된 관행을 가르칩니다. 나는 개인적으로 신뢰할 수있는 포럼 / 웹 사이트, stackoverflow / isocpp를 선호합니다.


답변