vector的push_back一次能压多大的数据?

jiangzy80 2008-12-24 01:00:02
我现在定义的一个结构,大小在50K左右,我使用vector.push_back()的时候就出错。而其它地方我同样采用这个方法来压数据都可以,当然其它地方的结构体没这么大?
...全文
862 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
NIL_ZJW 2010-12-28
  • 打赏
  • 举报
回复
哎!!问题解决,以下是我的数据存储方法
struct DATANUMBERLINE
{
string str[3205];
};
typedef vector<DATANUMBERLINE> DataNumberLine;

char *buf;
buf=(char*)malloc(Line*sizeof(char)); // buf用来存放读进来的字符串

while(1)
{
memset(buf,0,Line*sizeof(char));
p=readdata(fp, buf);//每次调用文件指针fp会自动后移一行 readdata是一个函数
if(!p)//文件读取结束则跳出循环
break;
datanumberline.str[i] = buf;
i++;
}
NIL_ZJW 2010-12-28
  • 打赏
  • 举报
回复
顶起,遇到了同样的问题,希望给个清晰的解决方案,能有简单的代码实现示例更好..
等待 并关注中
jiangzy80 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 imafish_i 的回复:]
引用 33 楼 jiangzy80 的回复:
#define MsndSTheaters std::vector <MsndSTheater *>
MsndSMovies m_mDataMovie
在函数中定义一个MsndSTheater,赋值后采用MsndSTheaters.push_back(mDataMovie)就出错哈。改成静态数组或这压指针就正常了。


1. #define 的是 <MsndSTheater *>的vector,压mDataMovie当然会出错了啊。
2. 如果不是这个错误,
{
MsndSMovies m_mDataMovie; //1
MsndSTheater mDataMov…
[/Quote]

我跟了的,就是在MsndSTheaters.push_back(mDataMovie);时出错。
jiangzy80 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 imafish_i 的回复:]
vector带有异常机制吧,try{}一下试试看看是什么异常。
会不会是达到了.capacity()调整vector大小时候出现的异常?这个时候需要双份的内存

或者试试先new出一段连续空间,压placement new出来的指针,这样就应该没有碎片了吧
[/Quote]

它是在第一次调用push_back()的时候就出错,这个时候应该不存在空间问题吧,当然不排除对象本身很大哈(50多K)

你说的先new出一段空间这个方法也可以,谢谢了哦
jiangzy80 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 yshuise 的回复:]
引用 49 楼 jiangzy80 的回复:
引用 47 楼 harry330 的回复:
最好别压大的对象,用指针替换,效率高。。不过我还是觉得压大对象不会出错,是你代码问题。


我本来改成了压指针的,但是现在又让我改成静态数组了。老大说不让压指针,说是wince下系统自己没有内存管理机制,说容易造成内存碎片,不知道有没有这个问题存在?

你老大是谁?vector内存是由stl管理的,本身就是为了解决内存碎片问题而设计的内存池。唉,你…
[/Quote]

对不起,我描述有点问题,他的意思不是说vector,而是直接用new哈
imafish_i 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 jiangzy80 的回复:]
#define MsndSTheaters std::vector <MsndSTheater *>
MsndSMovies m_mDataMovie
在函数中定义一个MsndSTheater,赋值后采用MsndSTheaters.push_back(mDataMovie)就出错哈。改成静态数组或这压指针就正常了。
[/Quote]

1. #define 的是<MsndSTheater *>的vector,压mDataMovie当然会出错了啊。
2. 如果不是这个错误,
{
MsndSMovies m_mDataMovie; //1
MsndSTheater mDataMovie; //2. 这里mDataMovie在栈上;
m_mDataMovie.push_back(mDataMovie); //3. push_back方法的参数是引用型,应该不会在栈上另开空间了
}
那么出错也应该在第二句那里出错啊吧,不知道我理解的对不对?
imafish_i 2009-01-12
  • 打赏
  • 举报
回复
vector带有异常机制吧,try{}一下试试看看是什么异常。
会不会是达到了.capacity()调整vector大小时候出现的异常?这个时候需要双份的内存

或者试试先new出一段连续空间,压placement new出来的指针,这样就应该没有碎片了吧
yshuise 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 jiangzy80 的回复:]
引用 47 楼 harry330 的回复:
最好别压大的对象,用指针替换,效率高。。不过我还是觉得压大对象不会出错,是你代码问题。


我本来改成了压指针的,但是现在又让我改成静态数组了。老大说不让压指针,说是wince下系统自己没有内存管理机制,说容易造成内存碎片,不知道有没有这个问题存在?
[/Quote]
你老大是谁?vector内存是由stl管理的,本身就是为了解决内存碎片问题而设计的内存池。唉,你老大!
jiangzy80 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 harry330 的回复:]
最好别压大的对象,用指针替换,效率高。。不过我还是觉得压大对象不会出错,是你代码问题。
[/Quote]

我本来改成了压指针的,但是现在又让我改成静态数组了。老大说不让压指针,说是wince下系统自己没有内存管理机制,说容易造成内存碎片,不知道有没有这个问题存在?
InfidelX 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 taodm 的回复:]
栈溢出!
windows是默认1M。嵌入系统一般栈默认就8~64K,甚至1K的都有。
你一下子搞一个50K的局部变量,当然就挂了。
[/Quote]

同意!严重同意的说。
harry330 2009-01-11
  • 打赏
  • 举报
回复
最好别压大的对象,用指针替换,效率高。。不过我还是觉得压大对象不会出错,是你代码问题。
agaric 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 taodm 的回复:]
栈溢出!
windows是默认1M。嵌入系统一般栈默认就8~64K,甚至1K的都有。
你一下子搞一个50K的局部变量,当然就挂了。
[/Quote]

64byte 栈的路过。
Row_Li 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 asksgp 的回复:]
老大你压指针嘛
-----------
弱问一声:压指针怎么用?和直接push_back()有什么不一样,哪位高人举例说明一下?
[/Quote]
直接压需要调用元素的拷贝构造函数,因此元素越复杂,效率就越低。压指针就没有这个问题,可以大大提高效率。
tianjiao85 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yshuise 的回复:]
老大你压指针嘛。效率高。
[/Quote]
这个是个好的方法,
减少拷贝,时间空间,都是一大节约。
yshuise 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 jiangzy80 的回复:]
引用 35 楼 yshuise 的回复:
对视本事对象型或是指针的出错可能性很大。
===========
对于复杂对象和指针出错的可能性很大。


你们的意思就是说,如果定义的结构体太过于复杂,就不能采用vector来直接存放了,只能通过压指针的方式了?但是WinCE系统好像没有内存管理机制,最好不要用new来动态分配内存的啊?不知道我说的对不对哈,请指教。
[/Quote]
不是,我的意思是指结构体里面有自定义对象,而这个自定义对象里面有其他对象指针,但是有没有写赋值构造函数函数,出错是一定的。对于pod不会错误。
zhangjundriver 2009-01-07
  • 打赏
  • 举报
回复
mark
asksgp 2009-01-07
  • 打赏
  • 举报
回复
老大你压指针嘛
-----------
弱问一声:压指针怎么用?和直接push_back()有什么不一样,哪位高人举例说明一下?
「已注销」 2009-01-07
  • 打赏
  • 举报
回复
LZ压指针好一些啊,效率高啊
hityct1 2009-01-07
  • 打赏
  • 举报
回复
mark
hityct1 2009-01-07
  • 打赏
  • 举报
回复
mark
加载更多回复(37)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧