Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Alineación de la memoria en iPhone y Android

Como he descubierto de mis pruebas malloc del iPhone tiene alineación de 16 bytes. Pero no estoy seguro si es garantizado o simplemente coincidencia.

Así que la pregunta es: ¿cuál es la alineación garantizada de la memoria cuando se utiliza malloc () en iOS y Android (NDK)?

  • El servidor NanoHttpd no puede transmitir videos grandes en android
  • Escaneo y edición de valores de memoria de aplicación de Android mediante programación
  • ¿Por qué EditText conserva el contexto de su actividad en Ice Cream Sandwich
  • EditText que causa la pérdida de memoria
  • Android NDK mmap llamada roto en dispositivos de 32 bits después de actualizar a Lollipop
  • Gráficos Android gran consumo de memoria montón? - LibGDX
  • Cómo borrar la memoria inactiva en Android mediante programación?
  • Pérdida de memoria causada por el método initialize de YouTubePlayer.Provider
  • 3 Solutions collect form web for “Alineación de la memoria en iPhone y Android”

    Malloc en C devuelve un puntero a un bloque de memoria "que está adecuadamente alineado para cualquier tipo de variable"; Si esta alineación es o permanecerá en 16 bytes no está garantizada incluso para diferentes versiones del mismo sistema operativo. Objetivo-C se basa efectivamente en C, por lo que debería ser cierto también.

    Si su Android NDK está escrito en C o C ++, lo mismo debería ser cierto allí.

    En iOS, la alineación es actualmente de 16 bytes, como has descubierto. Sin embargo, eso no está garantizado ni documentado. Es decir, no confíe en ello.

    Suponiendo que esté disponible en iOS, posix_memalign() permite la asignación de memoria específicamente alineada. Puede haber otros mecanismos.

    Android no es mi bailiwick.

    Estoy de acuerdo en que todavía no debe confiar en esto, pero para algo así como una función de hash es bastante útil.

    En realidad está documentado – https://developer.apple.com/library/ios/#documentation/performance/Conceptual/ManagingMemory/Articles/MemoryAlloc.html

    Extracto:

    Asignación de pequeños bloques de memoria con Malloc

    Para pequeñas asignaciones de memoria, donde small es algo menos que unas cuantas páginas de memoria virtual, malloc sub-asigna la cantidad de memoria solicitada de una lista (o "pool") de bloques libres de tamaño creciente. Cualquier pequeño bloque que desalocar usando la rutina libre se agrega de nuevo a la piscina y se reutiliza en una base de "mejor ajuste". El grupo de memoria en sí mismo está compuesto de varias páginas de memoria virtual que se asignan mediante la rutina vm_allocate y administradas por el sistema.

    Al asignar pequeños bloques de memoria, recuerde que la granularidad de los bloques asignados por la biblioteca malloc es de 16 bytes . Por lo tanto, el bloque más pequeño de memoria que puede asignar es 16 bytes y cualquier bloque mayor que eso es un múltiplo de 16. Por ejemplo, si llama a malloc y pide 4 bytes, devuelve un bloque cuyo tamaño es 16 bytes; Si solicita 24 bytes, devuelve un bloque cuyo tamaño es 32 bytes. Debido a esta granularidad, debe diseñar sus estructuras de datos con cuidado y tratar de hacer múltiplos de 16 bytes siempre que sea posible.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.