程序在线程内频繁分配和释放内存,字节数没有按机器字对齐,请问是否会出现段错误的情况,系统是X86 64位,红帽子 现在自己的程序出现了段错误,一时找不到原因,求教各位了:em16: :em16:
1。一个malloc请求分配的内存大小为什么最好能圆整为2的平方?
2。能说下内存对齐吗?对这个概念理解的不好。
3。怎样得到页面的大小?
4。怎样得到交换区的大小?
5。
[code]
#include
1、c专家编程说会按2^n对齐,那么我申请71或者15之类的奇数字节还不行了?不会吧?这样岂不是不精确了? 2、还有一句话,说,访问N字节(数据类型)数据时,其地址必须是N字节对齐的?见下图
[code] int *p; int x; x = 0; p = (int*)malloc(x * sizeof(int)); if (???) malloc failed; [/code] 不知道编译器如何处理这个问题,到底分配了空间没有?能不能用?怎么判断分配成功与否?
例如int *p=(int*)malloc(....) 然后我把p传给一个函数,这个函数内部要能否判断p是被分配了多大内存空间? free()函数是能释放正确的大小的,不知道内部有什么实现机制。 -------------------------------------------------------------------------- 请问unix/linux下面有没有系统函数可以判断出来p指针对应多少内存呢? 谢谢!
#include
/* 分配lCount个pTicket */ if (pTicket = (CDatRawTicket *)malloc(sizeof(CDatRawTicket)*lCount) == NULL) { gf_PrintMess(0,0,"", "Not enough memory to allocate buffern"); goto Error_Return; } /*取表数据到内存*/ gf_PrintMess(0,0,"", "size=%ld",sizeof(CDatRawTicket)*lCount); gf_PrintMess(0,0,"", "pTicket=%ld",pTicket); memset(pTicket,0x0,sizeof(CDatRawTicket)*lCoun...
想大家请教一个问题: char *ptr; ptr=(char*)malloc(0); 程序运行之后,ptr的值不为空,不知道为什么,请熟悉这个的告诉指导一下,这是怎么实现的。 我在linux下man malloc,里面有一个解释是当malloc的分配长度为0时,ptr有可能为0,也有可能 为一个地址,这是为什么? 谢谢