我正在发送一个文本文件 - 客户端和服务器将文本分成每个512字节的数据包,但有些数据包包含的文本大小不到最大值。在服务器端接收每个数据包时,我会调用malloc()重新构建一个字符串。这是一种糟糕的做法吗?是否更好保持一个可容纳最大长度的工作缓冲区并继续迭代,复制和覆盖其值?
好的@n.m.,这里是代码,这个if语句在由select()唤醒的for(;;)循环内部:
if(nbytes==2) {
packet_size=unpack_short(short_buf);
printf("packet size is %d\n",packet_size);
receive_packet(i,packet_size,&buffer);
printf("packet=%s\n",buffer);
free(buffer);
}
//and here is receive_packet() function
int receive_packet(int fd,int p_len,char **string) {
*string = (char *)malloc(p_len-2); // 2 bytes for saving the length
char *i=*string;
int temp;
int total=0;
int remaining=p_len-2;
while(remaining>0) {
//printf("remaining=%d\n",remaining);
temp = recv(fd,*string,remaining,0);
total+=temp;
remaining=(p_len-2)-total;
(*string) += temp;
}
*string=i;
return 0;
}
free(malloc(1));
(在Linux/glibc/i686上,使用rdtsc
测量),当它不需要从操作系统映射新内存,而是重用以前释放的现有内存。这几乎总是最常见的情况。唯一需要担心从操作系统获取新内存所需时间的情况是实时编程,其中您关心任何操作的最坏情况延迟,而不是程序的整体运行时间。 - R.. GitHub STOP HELPING ICE