核心巨集之 DIV ROUND UP(向上取整)

2022-08-19 15:27:11 字數 760 閱讀 9960

在linux\kernel.h中,有這麼乙個巨集:

1

#define div_round_up(n,d) (((n) + (d) - 1) / (d))

意為向上取整,網上解釋如下:

1. 問題

a,b都是整數並且 a>1, b>1

求 ┌ a/b ┐ 即 a/b 的上取整。

當 a/b 整除,往上取整返回值 為 a/b。

當 不整除,返回值是 int(a/b) + 1

2. 方法

int( (a+b-1)/b )

3. hunton 的證明

上取整用up表示

由於a>1、b>1,且a、b都是整數,所以可以設a=nb+m

其中n為非負整數,m為0到b-1的數,則

a/b = n + m/b

(a+b-1)/b = n + 1 + (m – 1)/b;

當m為0時,

up(a/b) = n,

int((a+b-1)/b) = n + int(1 – 1/b) = n

當m為1到b-1的數時,0 <= m-1 <= b-2

up(a/b) = n + 1,

int((a+b-1)/b) = n + 1 + int((m-1)/b) = n + 1

所以對a>1、b>1的整數a、b都有:

up(a/b) = int((a+b-1)/b)

核心巨集定義

參考 例如 include include define string hello world i love u n int main 執行結果 helloworld i love u 分割線因為對於乙個大程式而言,我們可能要定義很多常量 不管是放在原始檔還是標頭檔案 那麼我們有時考慮定義某個常量時...

核心MKDEV MAJOR, MINOR 巨集

版本 linux 2.6.24.4 巨集 mkdev major,minor 說明 獲取裝置在裝置表中的位置。major 主裝置號 minor 次裝置號 核心使用的版本號說明檔案 在核心 documentation 目錄下的 devices.txt 有說明。一般本地保留的 major 234 239...

核心驅動巨集 init, exit,

在編寫驅動中,我們經常看到這些巨集定義,我們定位進去看看,在 define init section init.text cold notrace define initdata section init.data define initconst section init.rodata defin...