C++ Memory and Optimization 6

[C++ 자료구조] 벡터의 동적할당 시 메모리 확장 방식

벡터는 push_back같이 메모리 공간이 더 필요할 때, 해당 공간만큼만 늘리지 않습니다. 예를들어 vector v가있다고 했을 때, 메모리를 차지하는 첫 공간은 0byte입니다. 하지만 필요하면 1byte -> 2bytes-> 4bytes->8bytes->16bytes이렇게 제곱으로 늘어납니다. 왜냐하면 공간이 필요할 때 마다 현재 차지하고 있는 공간의 두배를 할당해버리기 때문이죠. 다음 두 코드를 비교해 봅시다.//첫번째 케이스vector v;for(int i = 0 ; i v(100000,0); 두번째 케이스는 int가 4bytes이고 100000번 할당하니 그냥 4*100000 bytes만 필요로합니다.하지만 첫번째 케이스에서는 필요할때마다 벡터의 공간을 늘려주는 방식이니 최악의 경우 두배로 메..

[GPU병렬 처리] 쉐이더코드에서 if-else문을 안 쓰는 이유

평소 CPU코딩에만 익숙해져있다면, 다음과 같은 코드를 보고 굉장히 비효율적이라고 생각할 수 있습니다.[unroll] // warning X3557: loop only executes for 1 iteration(s), forcing loop to unrollfor (i = 0; i  hlsl 픽셀세이더에서는 GPU병렬처리를 이용하기 때문에 if-else문을 사용한다고 해서 조건에 참인 값만 계산되는 것이 아닙니다. 비트 마스킹을 이용하기 때문이죠.예를들어 이 코드는float4 color = // some color;if (someValue > 0.5) color = ExpensiveCalculation(); // 비싼 계산 실제로 이 코드로 실행이 됩니다.float4 color = // some ..

[메모리 관리] -고정형or 가변형 벡터의 힙과 스택 메모리 할당

고정형 벡터 vs. 가변형 벡터 1. 고정형 벡터int main(){ for (int i = 0; i  vec3는 고정형 벡터이며, x, y, z 좌표를 가지는 3D 벡터입니다. 반복문 내에서 선언된 vec3 v는 지역변수로 스택에 할당됩니다. 반복문이 한번 반복할 때마다 v는 해제되고, 새로운 객체가 생성되므로 메모리 관리가 안전하고 빠릅니다.  2. 가변형 벡터반면, 가변형 벡터인 std::vector의 경우:int main(){ for (int i = 0; i v(1000); }} 여기서 std::vector v는 스택에 생성되지만, 벡터의 실제 데이터는 힙에 할당됩니다. 반복문을 빠져나올 때마다 힙 메모리가 해제되므로 성능 저하가 발생할 수 있습니다. 여기서 어떻게 하면 성능 저하를 막을수..

C++과 C# 반복문에서 배열 반복 사용

C++과 C#의 반복문에서 배열이나 벡터를 반복적으로 사용할 때의 예시입니다.다음은 C++과 C#의 코드 입니다. 1. C++#include int main() { std::vector v(10000); for (int i = 0; i (10000); }} 2. C#using System;using System.Collections.Generic;class Program { static void Main() { List v = new List(new int[10000]); for (int i = 0; i (new int[10000]); } }} 코드 설명1) C++의 std::vector와 C#의 List:C++의 std::vector는 동..

[SIMD] - 데이터 병렬처리

SIMD는 Single Instruction, Multiple Data의 약자로, 하나의 명령어로 여러 데이터 요소를 동시에 처리할 수 있는 컴퓨터 아키텍처의 한 형태입니다. SIMD는 벡터 연산을 통해 데이터 병렬성을 활용하여 성능을 향상시키는 데 효과적입니다.1. SIMD의 주요 특징:병렬 처리: SIMD는 동일한 작업을 여러 데이터에 대해 동시에 수행할 수 있습니다. 예를 들어, 두 개의 벡터를 더하는 작업에서 각 요소를 개별적으로 처리하는 대신, 전체 벡터를 한 번에 처리할 수 있습니다.성능 향상: SIMD를 사용하면 CPU가 더 많은 데이터 처리를 동시에 수행할 수 있으므로, 특히 벡터 및 행렬 연산이 많은 그래픽스와 과학 계산에서 성능이 크게 향상됩니다.하드웨어 지원: 현대의 CPU는 SIMD..

이미지 픽셀 비트와 그래픽 처리 과정 중 비트 크기 차이

1. 이미지 파일의 비트 표현이미지 파일을 읽어오면 일반적으로 각 픽셀을 8비트(1바이트)로 표현하는 경우가 많습니다. 이는 그레이스케일(흑백) 이미지나, 각 색상 채널(Red, Green, Blue)을 8비트로 나타내는 컬러 이미지에서 주로 사용됩니다. 즉, **1픽셀 당 8비트(256단계)**로 각 색상이나 밝기 값을 표현하는 것이죠. 주로 가져올 때 unsigned char로 가져옵니다. unsigned char는 8비트이기 때문입니다.2. 32비트로 변환하는 이유이미지를 8비트에서 32비트로 변환하는 이유는 이미지 처리나 그래픽 처리 과정에서 주로 RGBA (Red, Green, Blue, Alpha) 형식을 사용하기 때문입니다. 여기서 Alpha는 투명도를 나타내는 값입니다.R, G, B, A ..