{"id":24105095,"url":"https://github.com/hernanatn/arenas","last_synced_at":"2025-06-27T06:39:45.264Z","repository":{"id":271578650,"uuid":"913905057","full_name":"Hernanatn/arenas","owner":"Hernanatn","description":"Librería de C++ para gestión de memoria por regiones","archived":false,"fork":false,"pushed_at":"2025-01-19T19:53:07.000Z","size":4251,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T07:05:01.731Z","etag":null,"topics":["arena-allocator","cpp-library","cpp17","memory-management"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-sa-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hernanatn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-08T15:21:02.000Z","updated_at":"2025-01-19T19:53:08.000Z","dependencies_parsed_at":"2025-01-08T16:47:34.453Z","dependency_job_id":"01f86295-288f-4ed0-88f4-3783a690628b","html_url":"https://github.com/Hernanatn/arenas","commit_stats":null,"previous_names":["hernanatn/arenas"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Hernanatn/arenas","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hernanatn%2Farenas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hernanatn%2Farenas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hernanatn%2Farenas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hernanatn%2Farenas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hernanatn","download_url":"https://codeload.github.com/Hernanatn/arenas/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hernanatn%2Farenas/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262209661,"owners_count":23275471,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arena-allocator","cpp-library","cpp17","memory-management"],"created_at":"2025-01-10T20:25:30.088Z","updated_at":"2025-06-27T06:39:45.221Z","avatar_url":"https://github.com/Hernanatn.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Arenas++\n\n`Arenas++` es una librería ligera en C++ diseñada para la asignación eficiente de memoria paginada en contextos de uso intensivo, donde los patrones de asignación y liberación son predecibles. Utiliza el modelo de **\"Asignar una vez, liberar una vez\"**, simplificando el manejo de memoria y reduciendo la complejidad asociada con múltiples llamadas a `new` y `delete` / `malloc` y `free`.\n\n\n\u003cimg src=\"https://img.shields.io/badge/hecho_por-Ch'aska-253545?style=for-the-badge\" alt=\"hecho_por_Chaska\" height=\"25px\"/\u003e \u003cimg src=\"https://img.shields.io/badge/C%2B%2B_17-4549BF?style=for-the-badge\u0026logo=c%2B%2B\u0026logoColor=white\" alt=\"C++\" height=\"25px\"/\u003e \u003ca href=https://www.raylib.com\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/pruebas-pasando-darkgreen?style=for-the-badge\" alt=\"pruebas\" height=\"20px\"/\u003e \u003ca href=https://github.com/hernanatn/github.com/hernanatn/futbol_fantasia/releases/latest\u003e\u003cimg src=\"https://img.shields.io/badge/Versión-0.0.2--alpha-orange?style=for-the-badge\" alt=\"version\" height=\"20px\"/\u003e\u003c/a\u003e \u003cimg src=\"https://img.shields.io/badge/Licencia-CC_BY--NC--ND_4.0-lightgrey?style=for-the-badge\" alt=\"licencia\" height=\"20px\"/\u003e\n\n## Índice\n1. [Introducción](#introducción)\n2. [Referencia de la API](#referencia-de-la-api)\n   - [Constructores](#constructores)\n   - [Métodos](#métodos)\n3. [Ejemplo de Uso Idiomático](#ejemplo-de-uso-idiomático)\n4. [Detalles Técnicos](#detalles-técnicos)\n5. [Estado del Proyecto](#estado-del-proyecto)\n6. [Licencia](#licencia)\n\n\n## Introducción\n\n`Arena` provee un modelo de asignación de memoria paginada, eficiente para situaciones en las que se realizan múltiples asignaciones dentro de un mismo contexto (por ejemplo, durante el procesamiento de un lote de datos). Todas las páginas de memoria se liberan de una vez al finalizar el contexto, evitando el costo de liberar cada bloque de forma individual.\n\n---\n\n## Estado del Proyecto\n\nEsta es la versión Alpha v0.0.1. La funcionalidad principal está implementada y probada con casos básicos y avanzados, pero la librería puede presentar errores y la API puede sufrir cambios sustanciales en el futuro.\n\n\n## Referencia de la API\n\n#### `Arena(size_t capacidad)`\nCrea una nueva arena con una capacidad inicial especificada.\n\n- **Parámetros:**\n  - `capacidad`: Tamaño inicial de la arena en bytes.\n- **Excepciones:**\n  - Lanza `std::bad_alloc` si no se puede asignar memoria.\n\n### Métodos\n\n#### `template \u003ctypename T\u003e T* alocar()`\nAsigna memoria suficiente para un objeto de tipo `T`, respetando los requisitos de alineación de `T`.\n\n- **Retorno:** Un puntero a memoria alineada para el tipo `T`.\n\n#### `void* alocar(size_t tamaño, size_t alineado)`\nAsigna un bloque de memoria de tamaño especificado con alineación personalizada.\n\n- **Parámetros:**\n  - `tamaño`: Cantidad de bytes a asignar.\n  - `alineado`: Alineación requerida (por defecto, `alignof(std::max_align_t)`).\n- **Retorno:** Un puntero a la memoria asignada.\n- **Excepciones:** Lanza `std::bad_alloc` si no hay memoria suficiente.\n\n#### `void liberar()`\nReinicia el marcador de uso de la arena, haciendo que toda la memoria previamente asignada sea reutilizable. Las páginas adicionales creadas durante el ciclo de vida también se reinician.\n\n## Pruebas\nLa librería incluye una suite (aún en progreso) de pruebas implementada con Catch2, que verifica el comportamiento correcto.\n\nSe puede correr el archivo provisto ( [/pruebas/correr_pruebas.exe](/pruebas/pruebas.exe) ) o [compilar las pruebas desde cero](/documentación/Pruebas.md)\n\n---\n\n## Ejemplo de Uso Idiomático\n\n```cpp\n#include \u003ciostream\u003e\n#include \"arenas.hpp\"\n\nstruct Vector3 {\n    float x, y, z;\n};\n\nint main() {\n    // Crear una arena con capacidad inicial de 1024 bytes\n    Arena arena(1024);\n\n    // Asignar un entero\n    int* entero = arena.alocar\u003cint\u003e();\n    *entero = 42;\n    std::cout \u003c\u003c \"Entero asignado: \" \u003c\u003c *entero \u003c\u003c std::endl;\n\n    // Asignar un objeto de tipo personalizado\n    Vector3* vector = arena.alocar\u003cVector3\u003e();\n    vector-\u003ex = 1.0f;\n    vector-\u003ey = 2.0f;\n    vector-\u003ez = 3.0f;\n    std::cout \u003c\u003c \"Vector asignado: (\" \u003c\u003c vector-\u003ex \u003c\u003c \", \" \u003c\u003c vector-\u003ey \u003c\u003c \", \" \u003c\u003c vector-\u003ez \u003c\u003c \")\\n\";\n\n    // Asignar un bloque de memoria alineado\n    void* bloque = arena.alocar(256, 64);\n    std::cout \u003c\u003c \"Bloque alineado asignado en: \" \u003c\u003c bloque \u003c\u003c std::endl;\n\n    // Reutilizar memoria liberando la arena\n    arena.liberar();\n\n    return 0;\n} \n```\n\n\n## Detalles Técnicos\n\n1.  **Estrategia de Paginación:**\n    - Si no hay suficiente espacio en la arena actual, se crea automáticamente una nueva página con el tamaño necesario.\n    - Las páginas adicionales se gestionan mediante una lista enlazada privada, asegurando un modelo de propiedad claro y evitando fugas de memoria.\n2. Eficiencia:\n    - Optimizada para contextos donde el patrón de uso es asignar múltiples bloques y liberarlos todos al final.\n\n3. Compatibilidad:\nRequiere un compilador compatible con C++17 o superior.\n\n## Licencia\nEste proyecto está licenciado bajo CC BY-SA 4.0. Ver el archivo LICENSE para más detalles.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhernanatn%2Farenas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhernanatn%2Farenas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhernanatn%2Farenas/lists"}