Я хочу определить булевский макрос в C, который использует менее 4 байт. Я рассмотрел это, и, возможно, можно определить макрос asm с gcc, который может быть меньше. Важно, чтобы определение было небольшим, потому что у меня будет десятки тысяч матриц, которые содержат эти логические значения, и важно, чтобы они были максимально эффективными по мере возможности памяти. В идеале я хочу определить 4-битный или 8-битный макрос, который представляет true и false, и будет оцениваться как таковой в if-statement.Определение минимально возможного размера макроса в C
Edit:
Когда я определяю макрос
#define True 0
#define False !True
, а затем распечатать размер, он возвращает размер 4 байта, что очень неэффективно.
Edit2:
Я только что прочитал на bitpacking, и тем не менее маленькие кусочки я мог бы иметь для булева будет лучше. Я просто не слишком уверен, как бить рюкзак, который имеет размер в несколько бит.
Edit3:
#include <stdio.h>
#include <string.h>
#define false (unsigned char(0))
#define true (!false)
int main() {
if (true) {
printf("The size of true is %d\n", sizeof(true));
}
}
дает следующий вывод
test.c: In function ‘main’:
test.c:8:9: error: expected ‘)’ before numeric constant
test.c:9:51: error: expected ‘)’ before numeric constant
Как вы определяете размер макроса? –
Вы ищете 'char' (или' int8_t')? – mpartel
Вы можете быть смущены - макрос не является переменной или типом данных (это что-то обрабатывается и расширяется компилятором/препроцессором.) Наименьшее представление логического значения немного, поэтому, возможно, вам нужны сжатые данные структурная упаковка 8 булевых в один байт. Пожалуйста, отредактируйте свой вопрос, если да, или объясните, почему это должно быть 4 или 8 бит. –