typedef struct a{
uint32 val1;
}A;
typedef struct b{
uint16 copy_val1;
}B;
void function1(A input)
{
B my_input;
my_input.copy_val1 = (uint16) input.val1; <-- Is this clean?
}
처음에는 구조체 a가 설계되었을 때 val1에는 두 개의 16 비트 값이 포함될 것으로 생각되었습니다. 그러나 우리는 하나의 16 비트 만 사용하기로했습니다.C typecasting uint32 to uint16
이제 메모리를 절약하기 위해 copy_val1의 유형을 uint32에서 uint16으로 변경합니다. 깨끗한 방법으로 타입 변환하고 val1의 16 비트 값을 copy_val1로 복사해야합니까?
OS는 MIPS 아키텍처의 vxworks입니다.
코드가 작동하지 않습니까? 이 같은 주조는 괜찮을 것입니다. – Caius
MIPS는 정렬에 매우 민감하며 컴파일러는 구조체 (패딩)의 요소를 레이아웃하는 방법을 많이 가지고 있으므로 팩을 채우지 않으면 메모리가 전혀 저장되지 않을 수 있습니다. 또한 내 경험에 비추어 볼 때 이것은 장기적으로 메모리 문제로 당신을 도울 수없는 마이크로 최적화의 일종입니다. 사실 IMHO는 매우 특정한 크기에 맞출 필요가없는 정수 값을위한 유형의 가장 좋은 선택은 그냥 보통 int (주목할만한 예외 : AVR과 같은 8 비트 아키텍처, int8_t는 정상적인 기본 선택 임) . – datenwolf
빡빡한 메모리로 당신을 도울 수있는 더 중요한 트릭이 있습니다 : 어딘가에'char memory_reserve [SIZEOF_MEMORY * 5/100];를'.bss' 섹션에 넣습니다. 즉, 프로젝트에 사용할 수있는 메모리의 5 % 결국 몇 달 후에, 긴 밤과 대량 메모리에서 작동하는 일부 알고리즘에서 사용되는 배열의 마지막 비트를 압축하기위한 모든 노력의 결과로 예비 메모리에서 일정량의 메모리를 제거하여 하루를 절약 할 수 있습니다. – datenwolf