조회 수 413 추천 수 2 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
배열을 선언할 때,
대개의 .NET 언어들은 랩핑시켜둔 고유의 키워드(인덱서)를 이용하여
int[] m_array = new int[5];  
와 같이 일차원 배열부터 다차원 배열까지 쉽게 선언해 사용할 수 있습니다.
그러나 이렇게 생성된 배열은 실제론 System.Array의 인스턴스이고 그 때문에 어쩔 수 없이 갖게 되는 몇 단점들이 있습니다.

바로 초기화작업으로 인한 느린 생성과 객체 참조 시의 어쩔 수 없는 오버헤드입니다.
(물론 이는 앞으로 보여줄 스택기반배열에대한 상대적인 비교입니다.)
사실 위와같이 일반 배열을 사용해도 보통 크게 문제될건 없지만,
어마어마한 반복작업탓에 약간의 오버헤드도 큰 문제를 야기할수 있는 때에
System.Array의 인스턴스가 아닌
unsafe
{
        //stackalloc 키워드는 메모리할당작업만을 합니다.
        //인스턴스화와 같이 불필요한 초기화작업은 하지 않습니다.
        int *stack_based_Array = stackalloc int [20];
}
와 같이 비안전영역에서 포인터를 사용하여 스택기반배열을 선언, 사용할 수가 있습니다.
*C#.NET 에서 포인터는 unsafe 블록을 선언하여 그 내부에서만 사용할 수 있습니다.

이렇게 stackalloc키워드로 할당이 된 배열은 stackalloc키워드가 반환하는 포인터를 이용해
        *(stack_based_Array+1) = 1;
와 같이 일반적인 포인터를 다루듯이 배열의 각 원소들을 접근할수도있고

        stack_based_Array[1] = 1;
와 같이 인덱서를 사용해서도 접근이 가능합니다.

그렇지만,
보통 C#에서의 포인터 사용을 권하지 않는것처럼
역시 이 방법도 배열을 선언하는 일반적인 방법으로는 추천할 수 없습니다..
확실히 이를 통해 오버헤드없는 성능 위주의 배열을 생성할순 있겠습니다만,
System.Array가 제공하는 여러가지 유용한 멤버들(Length 속성 등)을 사용할수 없을 뿐더러

unsafe
{
        int *stack_based_Array = stackalloc int [20];
        //할당된 메모리 영역 밖을 가르키는 인덱서입니다.
        stack_based_Array[30] = 6;
}
와 같이 할당된 영역이 아닌 전혀 엉뚱한 영역을 접근하여
심각한 데이타 파괴를 야기할수도 있기 때문입니다.
[홀개발자의 작업이라면 몰라도, 다른 개발자들이 깜빡 실수를 할수도 있거든요.(고의라던가..)]

PS : System.Array의 인스턴스라는 이야기에
(자주 사용하시는)ArrayList를 사용할때처럼 new 키워드로 인스턴스화 하시려는 분이 계신데,
System.Arrayabstract가 붙어있는 추상 클래스이고
인스턴스를 생성하기위해선 CreateInstance라는 메서드를 사용해야합니다.
*인자는 배열의 타입과 크기를 받습니다.
(추상 클래스는 .NET 2.0부터 추가된 static이 붙는 정적 클래스처럼 인스턴스화가 되지 않는 특성을 가지고 있습니다.)
--------------------------------------------------

기분이 나면 언어 스펙부터 차근차근 써보도록 하겠습니다.
출저는 http://geekproject.net/ (제 블로그)입니다. 저좀 많이 사랑해주세요^^ [하악하악]
?

  1. 물체 밀어서 움직이는 이벤트 조금 더 쉽게 하는 법

    Date2018.01.02 CategoryRPG Maker Byzero? Views644
    Read More
  2. [마지막 3명 모집] [취업연계무료교육] VR/AR 게임 콘텐츠 전문가 양성 과정 교육생 모집

    Date2017.07.14 Category언어/기타 By황금상자 Views702
    Read More
  3. rpg vxa 로 겜만들때 데미지 설정 공식[링크]

    Date2017.06.08 CategoryRPG Maker By준E Views740
    Read More
  4. [꿀팁] 간단하게 만들 수 있는 실시간 전투 시스템

    Date2017.03.31 CategoryRPG Maker By준E Views2019
    Read More
  5. JSON parser 변환데이터 저장시 생기는 Object Too Deep 해결하기

    Date2016.12.24 Category언어/기타 Bytitle: 댓글러lklslel Views851
    Read More
  6. 앙뜨프리너십에서 해커톤 부트캠프 모집중이네요

    Date2016.11.08 Category언어/기타 By마나님이 Views908
    Read More
  7. RPG MV에서 플러그인 오류의 원인에 대하여

    Date2016.07.08 CategoryRPG Maker Bytitle: 댓글러lklslel Views2359
    Read More
  8. RPG MV 게임 도중에 윈도우 스킨 파일 자체를 통째로 바꿔버리는 방법 (출처: HIME)

    Date2016.07.08 CategoryRPG Maker By최저 Views1627
    Read More
  9. 게임의 버전을 짜 보자! - 유의적 버전 2.0.0

    Date2016.06.07 Category언어/기타 ByYanggaeng Views1123
    Read More
  10. 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다!

    Date2016.03.12 CategoryRPG Maker By정궈니 Views2938
    Read More
  11. rpgmv 마우스 지원과 터치 지원이 되니.

    Date2015.10.25 CategoryRPG Maker By팡소리 Views1011
    Read More
  12. RPG Maker MV 와 AJAX를 이용한 웹통신 관련 영상.

    Date2015.10.25 CategoryRPG Maker ByHT9MAN Views2246
    Read More
  13. RPG게임 뻔한요소들.

    Date2015.10.05 Category언어/기타 Bytitle: 천무천무 Views1644
    Read More
  14. 자바스크립트와 관련해서 참고할 만한 사이트들

    Date2015.10.04 Category언어/기타 ByMARCO Views921
    Read More
  15. 꿀잼이군요!

    Date2015.05.20 Category언어/기타 By사람님[대회참가] Views873
    Read More
  16. [RPG2000/3 팁] 간편한 이벤트 단축키

    Date2015.04.06 CategoryRPG Maker Bytitle: 자게이하앵 Views1833
    Read More
  17. [RPG2000/3 팁] 간편한 이벤트 단축키

    Date2015.04.05 CategoryRPG Maker Bytitle: 자게이하앵 Views748
    Read More
  18. [강의링크] 대비법칙-색상대비-밀당의 재미 약한 반대색 설계

    Date2015.04.02 Category언어/기타 Bytitle: 천무천무 Views636
    Read More
  19. 오다 주웠습니다.

    Date2015.03.30 Category언어/기타 By사람님[대회참가] Views917
    Read More
  20. 무료 이미지 사이트 Pixabay!

    Date2015.03.28 Category언어/기타 By나작소 Views909
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51


[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)