Tengo que implementar una versión optimizada de malloc/realloc/free (adaptada para mi aplicación particular). En este momento, el código se ejecuta en una plataforma en particular, pero me gustaría escribirlo de manera portátil, si es posible (la plataforma puede cambiar en el futuro), o al menos me gustaría concentrar las posibles diferencias de plataforma en un único punto (probablemente a .h). Soy consciente de algunos de los problemas:¿Cómo administrar alineaciones de memoria y aritmética de puntero genérico de forma portátil en C?
- diferencias de alineación de memoria
- diferencias en el tamaño más pequeño bloques de memoria adecuada para la asignación de "genérico"
- diferencias en el tamaño del puntero
(I' Ignore las diferencias en los servicios básicos del sistema para la asignación de memoria aquí, ya que en algunos sistemas integrados pueden no estar disponibles. Imaginemos que trabajamos en un gran bloque de memoria preasignado para usarlo como "montón".
La pregunta (s):
- ¿Hay macros estándar o funciones en C para este tipo de propósito?
- ¿Qué otros problemas puedo enfrentar en este trabajo?
Gracias! Usar _Alignof & friends (e implementarlos en un archivo específico de plataforma si el SDK no lo hace) es la manera más limpia. –
El OP solicita un código portable y su respuesta es C11. Hasta donde yo sé, todavía no hay ningún soporte para compiladores en este lugar. De hecho, muchos compiladores ni siquiera son compatibles con C99. El uso de características específicas de C11 es probablemente una cierta manera de hacer el código no portátil durante los próximos 5-10 años más o menos. – Lundin
@Lundin, no digo que deba usarlo, digo que debería emularlo, estas son las interfaces para ir con El soporte para C11 será mucho más rápido que para C99. Básicamente agrega características que ya están allí (como esta, alineación), o hace que otras sean opcionales (como VLA, hilos o átomos). –