字節對齊處理技巧

簡介

所謂字節對齊問題,是指在內存中一個基本數值類型變量應該位於其sizeof大小的整數倍邊界上,換句話說,就是一個基本數值類型變量的地址可以被其sizeof大小所整除。好比,對於short類型,其地址應該可以2整除,而對於double類型,則要求能被8整除。 函數

這樣作是由CPU運算時獲取值的特性決定的,如今,大多數CPU都能處理字節不對齊的問題,但對於一些嵌入式CPU,咱們仍需加以重視,否則將致使程序出現異常,並且,從效率角度來說,咱們也應該避免字節不對齊的狀況出現。spa


方案

下面是一個將任意地址按照指定對齊大小進行向上對齊的函數:code

char* make_align(char* src, size_t aligned)
{
    return (src + aligned - 1) & ~(aligned - 1);
}

上述函數要求aligned必須爲2的冪,好比四、八、16等,實際中咱們也只會碰到這種狀況,若是要按照任意字節對齊,能夠採用以下函數:orm

char* make_align(char* src, size_t aligned)
{
    return (src + aligned - 1) / aligned * aligned;
}
相關文章
相關標籤/搜索