- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有一个名为 ttcp(测试 TCP)的小而相当古老的实用程序,用于 TCP 和 UDP 带宽测试。可以找到源代码here .此源代码中有整数类型变量bufalign
和bufoffset
,默认值为16384 和相应的0 字节。这两个变量用于创建另一个名为 buf
的变量:
if (bufalign != 0)
buf +=(bufalign - ((int)buf % bufalign) + bufoffset) % bufalign;
如果我没理解错的话,这个buf
稍后会用于通过write()
和sendto()
系统调用实际发送数据。然而,虽然上面代码片段中的数学很简单,而且我知道 bufalign
和 bufoffset
变量与内存分配有关,但我不明白为什么在 ttcp 源代码?
最佳答案
如果我正确理解你的问题,听起来你想知道为什么它们是变量而不是静态常量(即 static const int bufalign = ...
等)或者只是硬-编码的未命名魔数(Magic Number)。在页面上进行快速搜索,它们被分配的唯一位置是在它们的声明语句中或在进行命令行参数处理时。
由于可以指定命令行参数来更改它们的值,我猜这就是“源代码中需要它们的原因”。
--编辑--
代码行 buf +=(bufalign - ((int)buf % bufalign) + bufoffset) % bufalign;
只是指针运算,以确保内存地址 buf
指向的是对齐到一个特定的倍数。 buf
的内存地址递增,使其等于下一个内存位置,它是 bufalign
的倍数(这样 buf
开始于默认情况下为 16k 倍数的内存地址),附加偏移量 bufoffset
。
您对稍后如何使用 buf 的假设是正确的。但是,使用 bufalign 和 bufoffset 的指针算法是不必要的,应该删除。源代码是相当古老的 C 风格——我最好的猜测是,无论这个程序最初设计用于什么平台,都需要这行有问题的代码。
我也没有看到任何释放分配给 buf 的内存的东西,这是内存泄漏。
关于c - ttcp 源代码中的 "bufalign"和 "bufoffset"整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27510764/
有一个名为 ttcp(测试 TCP)的小而相当古老的实用程序,用于 TCP 和 UDP 带宽测试。可以找到源代码here .此源代码中有整数类型变量bufalign 和bufoffset,默认值为16
我是一名优秀的程序员,十分优秀!