【发布时间】:2014-03-21 11:45:00
【问题描述】:
我需要将一个大的图像或文本文件分成多个 10 字节的块。这些块将通过 UDP 发送到服务器。问题是: 1.我不确定这个代码。这是拆分文件的好方法吗? 2.程序内存使用率很高。 400 KB 仅用于此功能。
int nChunks = 0;
char chunk[10];
FILE *fileToRead;
fileToRead = fopen(DEFAULT_FILENAME, "rb");
while (fgets(chunk, sizeof(chunk), fileToRead)) {
char *data = malloc(sizeof(chunk));
strcpy(data, chunk);
packet *packet = malloc(sizeof(packet));
packet->header = malloc(sizeof(packetHeader));
packet->header->acked = 0;
packet->header->id = ++nChunks;
packet->header->last = 0;
packet->header->timestamp = 0;
packet->header->windowSize = 10;
packet->data = data;
list_append(packages, packet);
}
typedef struct packetHeader{
...
}packetHeader;
typedef struct packet{
packetHeader *header;
void *data;
}packet;
【问题讨论】:
-
是的,我觉得不错。将
malloc移到while loop之外。从FILE流中读取字节到缓冲区,然后重用缓冲区。 :) -
400KB 没什么好担心的——即使手机也有几个 GB。
-
在`list_append 之后释放
header和data -
@suspectus 几 GB 的 RAM? IBTD。
-
有什么理由将
chunk复制到data然后复制到packet->data而不是直接复制到packet->data?
标签: c