0Pricing
C++ Academy · Lección

Asignación del marco de una coroutine

Razone sobre la asignación y la duración del marco de una coroutine.

Asignación del marco de una coroutine es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Dónde vive el estado

Las variables locales de una corrutina sobreviven a las suspensiones. No pueden vivir en la pila: la función retorna entre suspensiones. En su lugar, viven en un marco de corrutina asignado en el heap.

Qué contiene el marco

El marco contiene:

  • Los parámetros de la corrutina
  • El objeto promise
  • Las variables locales que viven entre suspensiones
  • Los punteros a las funciones de reanudación y destrucción

Coste de asignar el marco

Cada llamada a una corrutina asigna un marco. Las asignaciones no son gratuitas, lo que resulta significativo en corrutinas de alta frecuencia. Los compiladores optimizadores pueden eliminar la asignación cuando la duración está acotada; esto se conoce como HALO (Heap Allocation eLision Optimization).

Cuándo entra en acción HALO

El compilador puede evitar la asignación en el heap cuando:

  • Se puede demostrar que la duración de la corrutina está contenida
  • La expansión en línea demuestra que el marco cabe en la pila
  • El tamaño del marco es fijo en tiempo de compilación

Asignadores personalizados

Puede proporcionar asignadores personalizados para los marcos de sus corrutinas sobrecargando operator new dentro del tipo promise.

struct promise_type {
    void* operator new(size_t size) {
        return std::malloc(size);
    }
    void operator delete(void* ptr) {
        std::free(ptr);
    }
};

Pools de marcos

En sistemas asíncronos de alto rendimiento, asigne los marcos desde un pool para evitar la sobrecarga del asignador general. Cada subproceso o tipo de tarea puede tener su propio pool.

Tamaño del marco

El tamaño del marco depende del conjunto más grande de variables que pueda estar activo en cualquier punto de suspensión. Añadir más variables locales aumenta su tamaño.

Cómo reducir el tamaño del marco

Consejos:

  • Restrinja estrictamente el ámbito de las variables
  • Evite los arrays locales grandes; utilice explícitamente el heap
  • Mueva los temporales a funciones auxiliares independientes que no sean corrutinas

Inspección de marcos

Los compiladores pueden imprimir los tamaños de los marcos. Con clang, utilice -fcoro-aligned-allocation e inspeccione el resultado mediante las opciones de diagnóstico. El código desensamblado revela la disposición del marco.

Duración y limpieza

El marco de la corrutina se destruye cuando termina final_suspend o antes si se destruye explícitamente. Los miembros RAII se destruyen correctamente.

Seguridad de la memoria

Un handle de corrutina es un puntero crudo. Conservarlo después de que se haya destruido la corrutina produce un comportamiento indefinido. Los tipos de biblioteca encapsulan los handles en RAII para evitarlo.

Cuándo preocuparse

La mayoría de las aplicaciones nunca necesitan preocuparse por la asignación de marcos. Preocúpese solo si tiene millones de corrutinas o restricciones de rendimiento extremas. Perfile primero.

Comprobación rápida

¿Por qué un marco de corrutina suele vivir en el heap?

Resumen

Las corrutinas asignan un marco en el heap para conservar el estado entre suspensiones. Los compiladores pueden eliminar la asignación (HALO) cuando es posible. Los asignadores personalizados y los pools de marcos ayudan en sistemas de alto rendimiento; la mayoría del código no necesita preocuparse por ello.

Preguntas frecuentes

¿La lección «Asignación del marco de una coroutine» es gratis?

Sí — el texto completo de «Asignación del marco de una coroutine» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Asignación del marco de una coroutine»?

Razone sobre la asignación y la duración del marco de una coroutine. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Asignación del marco de una coroutine»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos de coroutines: co_await, co_yield y co_return
  2. Implementación de un generador sencillo
  3. Tareas asíncronas y tipos awaiter
  4. Asignación del marco de una coroutine
← Volver a C++ Academy