보통 C계열 2차원 배열의 메모리 구조가 아래와 같잖아.
그런데 VBA는 또 이렇더라고.
문제는 이 둘이서 직렬화한 데이터를 주고받아야되는데,
저거 때문에 좆됐음.
물론 2차원 배열은 저거 Transpose하는거 존나게 쉬운데,
이게 n차원으로 가면 어떻게 해야할지 골때림.
C#에서 Rank랑 각 차원 길이는 구할수 있으니까,
계산할 수는 있을거 같은데,
막상 계산하려니까 진짜 답이 안보임.
3차원까지는 구조가 보이니까 할것도 같은데,
이걸 n차원의 일반식을 어떡해야하나 모르겠음.
가능은 한가여? ㅠㅠ
3차원 그림도 올려주라 ㅇㅅㅇ
선형대수로 가버렷
근데 직접 짤 필요 없이 어딘가에 누군가가 다 짜 둔게 있을 거 같음
시각적으로 봤을때 C계열은 위에서 아래로 쌓고, vba는 왼쪽에서 오른쪽으로 쌓기때문에 2차원판도 똑같은 방향으로 쌓아올릴테고 3차원 큐빅도 그렇게 쌓아올릴 것으로 추정됨. C패턴을 기준으로 한다면 N차원을 구성하는 N-1 차원 N 개를 transposing 시키고 다시 각각의 n-1차원들에 대해서 똑같이 거듭 적용하는 식..?
직렬화 할때 차원의 갯수와 각 차원의 길이를 앞에 첨부하면 역직렬화 하기 쉬울 듯..
근데 굳이 transposing 할 필요가 있나..? 인덱스 변환해서 먹이는 구현을 감싸서 읽고 쓸 때 호환만 되게 하는 것도 한가지 방법...
ㄴ 아니 그냥 배열을 Buffer.BlockCopy를 했더니 이상하게 나와서 확인해보니 저럼. ㅠㅠ 차원수와 각 차원 길이가 문제가 아니라, 메모리 배치 자체가 문제임. ㅠㅠ
일단 짤 이미지 사이트는
https://eli.thegreenplace.net/2015/memory-layout-of-multi-dimensional-arrays/
저 링크 읽어보면 n차원 일반항 오프셋 구하는거는 나오는데, 둘을 어떻게 바꿀지가 헷갈림. 저거도 겨우 이해했는데. ㅠㅠ
아직 저거 다 안읽었는데, 밑에 보니 또 파이썬에 얘기가 있네. 아직 읽는중. ㅠㅠ
보니까 포트란에서도 Col-major인 모양이네.
링크에 답 나와있는데 ㅇㅅㅇ 1 -> n 차원으로 가는게 row-major고 col-major는 반대로 간다고