Después de observar en varios repositorios y sitios de internet finalmente descubrimos la respuesta que te compartiremos aquí.
Solución:
memset
es anterior (bastante) a la adición de prototipos de funciones a C. Sin un prototipo, usted hipocresía pasar un char
a una función — cuando/si lo intenta, será promovida a int
cuando lo pasas, y lo que recibe la función es un int
.
También vale la pena señalar que en C, (pero no en C++) un carácter literal como 'a'
lo hace no tener tipo char
— tiene tipo int
entonces lo que pase será generalmente comenzar como un int
de todos modos. Esencialmente, la única forma de que comience como char y sea promovido es si aprueba un char
variable.
En teoria, memset
probablemente podría modificarse para que reciba un char
en lugar de un int
, pero es poco probable que haya algún beneficio, y una posibilidad bastante decente de romper algún código antiguo u otro. Con un costo desconocido pero potencialmente bastante alto, y casi ninguna posibilidad de ningún beneficio real, diría que las posibilidades de que se cambie para recibir un char
caer justo en la línea entre “delgado” y “ninguno”.
Editar (respondiendo a los comentarios): El CHAR_BIT
partes menos significativas del int
se utilizan como el valor para escribir en el destino.
Probablemente la misma razón por la que las funciones en
llevar ints
y no chars
.
En la mayoría de las plataformas, un char
es demasiado pequeño para colocarse en la pila por sí mismo, por lo que generalmente se inserta el tipo más cercano al tamaño de palabra de la máquina, es decir int
.
Como señala el enlace en el comentario de @ Gui13, hacer eso también aumenta el rendimiento.
Recuerda que puedes compartir este post si si solucionó tu problema.