es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es el uso/sintaxis correctos del especificador alignas() de C++17 para matrices de tipos fundamentales asignadas dinámicamente?

Esta debe ser una pregunta repetida, pero no la he encontrado después de buscar durante 2 días …

Estoy usando MSVC con /std:c17 /std:c++17 e intentando hacer que alignas(64) funcione con arrays de doubles. La sintaxis en el código de abajo es la única que he encontrado que se compila, pero no se está alineando … normalmente, el array no está alineado aproximadamente el 75% del tiempo. Sé que hay muchas formas de hacer esto con una sintaxis más complicada, pero ¿no hay alguna manera que funcione “de manera automática” con alignas(), como lo haría con una estructura o clase?

double* AR;
int count=0, asize=10;
for (int i = 0; i < 1000; i++)
{
    AR = new double alignas(64)[asize];
    if (((uintptr_t)AR & 63) != 0) count++;
    //if (((uintptr_t)AR % 64) != 0) count++;
    delete[] AR;
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando alinear un arreglo de números decimales a un límite de 64 bytes utilizando la palabra clave alignas en C++17. Si bien esta sintaxis es correcta, puede que no siempre funcione como se espera debido a problemas de asignación de memoria y alineación.

    Una forma de asegurar una alineación adecuada es utilizar un asignador personalizado que alinee la memoria al límite deseado. Otra opción es utilizar una estructura o clase que contenga el arreglo alineado como una variable miembro, ya que la palabra clave alignas se usa más comúnmente para alinear miembros de estructuras o clases.

    En tu ejemplo de código específico, es posible que el arreglo no esté alineado debido a la fragmentación de memoria o limitaciones del hardware subyacente. Puede ser útil investigar métodos alternativos de asignación de memoria y alineación para asegurar una alineación adecuada del arreglo.

Comments are closed.