【发布时间】:2016-02-29 07:03:09
【问题描述】:
我正在尝试在 C 中读取一个大刻度文件,并为它们每秒保存一个结构。每一秒,我都会在这个结构中拥有不同的代码。但是,如果在某一秒内我们看到太多的代码量,我的代码将会崩溃。
例如,
在第二个 1 中,它只有 10 个代码。 在第二个 1000 中,它正在看到 10000。
我的代码将为每一秒分配相同大小的内存,因此它在安静的第二秒浪费了太多的内存,但对于忙碌的第二秒却不够大。
请在下面找到我的添加结构代码,
long int addTickArray(long int TickTime, int maximumOrderSize, struct TickArray*TickArray, long int TickPos) {
int i;
for (i = TickPos; i < maximumOrderSize; i++) {
if (TickArray[i].TickTime == NULL) {
break;
} else if (TickArray[i].TickTime == TickTime) {
return i;
}
}
struct TickArray newTickArray;
newTickArray.Ticker = malloc(4000 * sizeof (char*) *10);
newTickArray.askprice = malloc(4000 * sizeof (float*));
newTickArray.bidprice = malloc(4000 * sizeof (float*));
newTickArray.TickTime = TickTime;
newTickArray.TickTimePos = 0;
TickArray[i] = newTickArray;
return(i);
}
我不确定是否有任何聪明的方法可以为结构分配灵活的内存。
【问题讨论】:
-
你不能在每个时间间隔内只处理一个限制,并将剩余的推迟到下一个周期吗?
-
不确定这里到底发生了什么,但为什么不为要存储的数据分配适当的内存量
-
您可以将接收到的输入保存到动态分配的链表中,对项目进行计数,分配您的 tickarray 元素,将收到的项目复制到结构中并取消分配链表。或者...无论如何,要解决这个问题,您需要一个中间数据结构。
-
另外,您的程序是否足够快,可以在 1 秒内处理 10000 个条目?如果没有,那么您的规范很可能存在根本缺陷
-
问题不清楚。如果您正在阅读 "big ticks file",那么您应该能够计算您正在阅读的内容并将其分配(或传递所需的大小)给您的函数,以便为大批。无论如何,要获得更详细的帮助,您需要发布最低完整可验证示例(请参阅:How to create a Minimal, Complete, and Verifiable example)
标签: c arrays memory struct out-of-memory