使用sqlite3 发现内存一直涨

Life_is_so 2014-08-11 01:52:59
gcc版本:arm-none-linux-gnueabi-gcc gcc version 4.2.1 (CodeSourcery Sourcery G++ Lite 2007q3-51)

程序:
#define DATABASE_NAME "tb1.db"
int main()
{
char sql[128];
nsert into tb (id, data) values( %d, %d)", no++, 2sqlite3 *db;

sqlite3_open(DATABASE_NAME, &db); //打开(或新建)一个数据库

memset(sql, '\0', 128);
strcpy(sql, "create table tb(id INTEGER PRIMARY KEY, data int(100))");
sqlite3_exec(db, sql, NULL, NULL, NULL);

int i;
int no = 0;
for(i = 0; ; i++){
sprintf(sql, "insert into tb (id, data) values( %d, %d)", no++, 2);
sqlite3_exec(db, sql, NULL, NULL, NULL);

sprintf(sql, "insert into tb (id, data) values( %d, %d)", no++, 2);
sqlite3_exec(db, sql, NULL, NULL, NULL);

sprintf(sql, "insert into tb (id, data) values( %d, %d)", no++, 2);
sqlite3_exec(db, sql, NULL, NULL, NULL);
sprintf(sql, "insert into tb (id, data) values( %d, %d)", no++, 2);
sqlite3_exec(db, sql, NULL, NULL, NULL);

sprintf(sql, "insert into tb (id, data) values( %d, %d)", no++, 2);
sqlite3_exec(db, sql, NULL, NULL, NULL);

sprintf(sql, "insert into tb (id, data) values( %d, %d)", no++, 2);
sqlite3_exec(db, sql, NULL, NULL, NULL);

sprintf(sql, "insert into tb (id, data) values( %d, %d)", no++, 2);
sqlite3_exec(db, sql, NULL, NULL, NULL);
usleep(100000);
}
}

top命令:
程序刚启动时 RSS:1112 MEM:1.8

现在是:
Mem: 37024K used, 24228K free, 0K shrd, 120K buff, 26060K cached
Load average: 0.82, 1.64, 1.90 (State: S=sleeping R=running, W=waiting)

PID USER STATUS RSS PPID %CPU %MEM COMMAND
578 root R 2312 534 63.2 3.7 arm_sqlite_test

请分析是什么问题?

...全文
730 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Life_is_so 2014-08-12
  • 打赏
  • 举报
回复
引用 7 楼 angel_su 的回复:
不都是这样吗,数据在内存里操作效率高,等到事务提交时才会写入文件。不想耗费太多内存就有计划性定期提交..
如果原理是这样,我写程序时怎么灵活的控制?我需要少用内存?
angel_su 2014-08-12
  • 打赏
  • 举报
回复
不都是这样吗,数据在内存里操作效率高,等到事务提交时才会写入文件。不想耗费太多内存就有计划性定期提交..
Life_is_so 2014-08-12
  • 打赏
  • 举报
回复
从昨天下午4点到今天早上9点发现内存不在变化 Mem: 54316K used, 6936K free, 0K shrd, 120K buff, 41836K cached Load average: 0.80, 0.75, 0.66 (State: S=sleeping R=running, W=waiting) PID USER STATUS RSS PPID %CPU %MEM COMMAND 578 root R 3440 1 63.5 5.6 arm_sqlite_test 是不是sqlite内部有什么机制,需要用很多内存?
707wk 2014-08-11
  • 打赏
  • 举报
回复
路过。。。
tixisong 2014-08-11
  • 打赏
  • 举报
回复
引用 3 楼 Life_is_so 的回复:
[quote=引用 2 楼 Cnwanglin 的回复:] for(i = 0; ; i++){ 这是个无限循环阿 。。。 一直在写表,肯定会增加的
难道数据存在内存中?不是写到flash里了吗?[/quote] 你要确定有没有报错,sqlite3_exe最后一个参数char**,这里面记录了报错信息,若有错,要用sqlite3_free释放 建议LZ检查下sqlite3_exe返回值
Life_is_so 2014-08-11
  • 打赏
  • 举报
回复
引用 2 楼 Cnwanglin 的回复:
for(i = 0; ; i++){ 这是个无限循环阿 。。。 一直在写表,肯定会增加的
难道数据存在内存中?不是写到flash里了吗?
Cnwanglin 2014-08-11
  • 打赏
  • 举报
回复
for(i = 0; ; i++){ 这是个无限循环阿 。。。 一直在写表,肯定会增加的
赵4老师 2014-08-11
  • 打赏
  • 举报
回复
不知道。 我只知道SQL Server内存一直涨是正常的。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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