&引用;“bufalign”;及;“bufoffset”;ttcp源代码中的整数
有一个很小很旧的实用程序,名为ttcp(testtcp),用于TCP和UDP带宽测试。可以找到源代码。在此源代码中,有整数类型变量&引用;“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(
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
的目的是什么。