代码:
while(connectionOK) //connectionOK is the connection with server which might be forever
{
if(userlookup_IDNotFound(userID))
user_struct* newuser = malloc(getsize(user_struct));
setupUserAccount(newuser);
}
如果重要的话,我在ubuntu/ linux中使用了gcc。我知道像getrlimit这样的东西,但不确定它是否提供堆大小。尽管它确实给出了输入
我记得在我十几岁的时候第一次从我的书中学习记忆处理,下面的例子是:
void foo()
{
int a[1000000]; // waste of stack
// ...
}
vs
void foo()
{
int* ptr = malloc(1000000 * sizeof(int)); // much better, because the size of stack is limited
// ...
}
(是的,我听说过,有时编译器可能会将第二段代码优化为第一段)
我总是把堆栈想象成一个“固定的、有限的”内存空间,我的老书说“堆栈很小,不要浪费它”,
我正在使用ioctl()从块设备(Scsi)读取数据。
我注意到,当我读取1024扇区时,ioctl完成时没有任何问题。当我读取2048时,过了很长一段时间后,它返回ENOMEM (errno=12),这甚至没有列在可能的错误列表中(请参阅)
我已经tripple检查了我传递的缓冲区大小是否合适,所以这不可能是这种情况--没有缓冲区溢出。
那么,我如何才能知道使用ioctl读取的最大缓冲区大小?
编辑1
一些附加信息可能会对您有所帮助:
Enterprise Linux Enterprise Linux Server release 5.3 (Carthage)
Red Hat Enterpr