&引用;“bufalign”;及;“bufoffset”;ttcp源代码中的整数

&引用;“bufalign”;及;“bufoffset”;ttcp源代码中的整数,c,C,有一个很小很旧的实用程序,名为ttcp(testtcp),用于TCP和UDP带宽测试。可以找到源代码。在此源代码中,有整数类型变量bufalign和bufoffset,默认值分别为16384和0字节。这两个变量用于创建另一个名为buf的变量: if (bufalign != 0) buf +=(bufalign - ((int)buf % bufalign) + bufoffset) % bufalign; 如果我理解正确,这个buf稍后将用于通过write()和sendto(

有一个很小很旧的实用程序,名为ttcp(testtcp),用于TCP和UDP带宽测试。可以找到源代码。在此源代码中,有整数类型变量
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=…
),或者只是硬编码的未命名的幻数。在页面上进行快速搜索时,只会在声明语句中或在执行命令行参数处理时指定它们

由于可以指定更改其值的命令行参数,我猜这就是“源代码中需要它们的原因”

--编辑--

代码行
buf+=(bufalign-((int)buf%bufalign)+bufoffset)%bufalign
只是一种指针算法,用于确保指向的内存地址
buf
与特定的倍数对齐。
buf
的内存地址递增,使其等于下一个内存位置,该位置是
bufalign
的倍数(因此
buf
默认从16k倍数的内存地址开始),并具有额外的偏移量
bufoffset

您对以后如何使用buf的假设是正确的。但是,使用bufalign和bufoffset的指针算法是不必要的,应该删除。源代码是非常老式的C语言-我最好的猜测是,无论这个程序最初是为什么平台设计的,都需要这行有问题的代码


我也没有看到任何释放为buf分配的内存的情况,这是内存泄漏。

谢谢您的回复!我想知道为什么首先需要这两个变量。我完全理解
buflen
变量,该变量定义TCP段(aka数据包)中的数据量,并用于在
buf=(char*)malloc(buflen+bufalign)
中创建
buf
变量。但是,我不明白这个计算的目的是什么:
buf+=(bufalign-((int)buf%bufalign)+bufoffset)%bufalign
。总的来说,
bufalign
bufoffset
的目的是什么。