Você está enganado porque analisar um arquivo parece ineficiente, porque você o desconsidera. Você provavelmente já sabe que as informações em /proc
são "criadas" somente quando você as solicita e não atualizadas sempre que houver uma alteração. Portanto, você não apenas precisa analisá-lo, mas o kernel precisa gerá-lo como texto.
Ler alguns bytes diretamente em um longo é, obviamente, mais eficiente do que chamar atoi()
em uma string. Mas você tem que ver isso como parte do contexto onde você precisa fazer uma chamada de sistema. Todo o código extra executado para ler algum conteúdo de arquivo (ou chamar alguma API binária que o kernel possa fornecer) supera o tempo que leva para fazer a conversão de string.
Processos de kernel, que precisam desse tipo de dados com muito mais frequência do que o programa médio, não têm a sobrecarga de fazer chamadas de sistema para acessar esses dados e podem acessar esse tipo de dados diretamente.