Adresse alignen



  • Hallo,
    gibt es einen portablen Weg, eine Adresse hinsichtlich eines bestimmten Wertes zu alignen, also auf den naechsten durch eben diesen Wert teilbare Adresse zu bringen.
    Also was hier mit ints gemacht wird nur halt fuer Zeiger.

    inline int Align(int adress, unsigned int alignment)
      {
        if (adress % alignment != 0)
          return adress + (alignment - (adress % alignment));
    
        return adress;
      }
    

    Vermutlich muesste man casten, aber welcher Datentyp hat garantiert mindestens die Groesse eines Zeigers?

    Danke.



  • std::ptrdiff_t aus cstddef ist für sowas gedacht.

    #include <cstddef>
    
    inline void *Align(void *address, unsigned int alignment)
    {
    	std::ptrdiff_t ptr = static_cast<std::ptrdiff_t>(address);
    
    	if (ptr % alignment != 0)
    		return static_cast<void*>(ptr + (alignment - (ptr % alignment)));
    
    	return address;
    }
    


  • Wunderbar, danke 🙂


Anmelden zum Antworten