O C oferece uma forma especial para declarar o tamanho(em bits) dos membros em uma estrutura, conhecido como bit field, é um inteiro com o número de bits especificado. O bit field é declarado com um structure member do tipo int, signet int, unsigned int, ou bool. Você declara o bit file após o nome do membro seguido por ":" e o número de bits que irá ocupar.
O bit field funciona bem para controle, conforme o exemplo abaixo:
#include <stdio.h>
int main(){
/* Criar a estrutura */
struct connectionStatus {
unsigned int TCP_UDP:1;
unsigned int PORT:32;
unsigned int OK:1;
};
/* Variavies que vão receber os valores */
struct connectionStatus firstConnection;
struct connectionStatus secondConnection;
/* Definir status da primeira Conexão */
firstConnection.TCP_UDP = 1;
firstConnection.PORT = 80;
firstConnection.OK = 1;
/* Definir status da segunda Conexão */
secondConnection.TCP_UDP = 0;
secondConnection.PORT = 5556;
secondConnection.OK = 0;
/* Imprimir valores da primeira conexão */
if (firstConnection.TCP_UDP == 1) {
printf("Primeira Conexão...................\n");
printf("Conexão TCP\n");
printf("Porta: %d\n", firstConnection.PORT);
if (firstConnection.OK == 1) {
printf("Status: Conexão estabelecida !\n");
} else {
printf("Status: Erro para conectar !\n");
}
}
/* Imprimir valores da segunda conexão */
if (secondConnection.TCP_UDP == 0) {
printf("\nSegunda Conexão...................\n");
printf("Conexão TCP\n");
printf("Porta: %d\n", secondConnection.PORT);
if (secondConnection.OK == 1) {
printf("Status: Conexão Estabelecida !\n");
} else {
printf("Status: Erro para conectar !\n");
}
}
};No exemplo criamos uma estrutura que mostra o status das fictícias conexões, e o bit field foi utilizado para esse fim. Então imagine um cenário onde temos centenas ou milhares de conexões simultâneas e você declarou um int de 32 bits (tamanho padrão desse tipo em um sistema 32bits) para a variável TCP_UDP, você terá um consumo 31 vezes maior de memória por conexão do que se tivesse declarado 1 bit apenas.
Nenhum comentário:
Postar um comentário