先说结论: 在使用多线程时,不要使用threadpool,应该使用threading, 尤其是数据量大的情况。因为threadpool会导致严重的内存占用问题! 对比threading和threadpool的内存占用 结果: 1. 使用threadpool时 2. 使用threading时 对比可以 ...
分类:
编程语言 时间:
2018-01-17 01:20:39
阅读次数:
255
inux释放内存的命令:syncecho 1 > /proc/sys/vm/drop_cachesdrop_caches的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值)1:释放页缓存2:释放dentries和inodes3:释放所有缓存释放完内存后改回去让系统重新自动分配内存。e ...
分类:
系统相关 时间:
2018-01-15 10:59:08
阅读次数:
177
全局队列的本质就是并发队列 dispatch_get_global_queue(0,0); 全局队列和并发队列的区别 1. 并发队列有名称, 可以跟踪错误, 全局队列没有 2. 在ARC中不需要考虑释放内存, dispatch_release(q); 不允许调用. 在MRC中需要手动释放内存, 并发 ...
分类:
其他好文 时间:
2018-01-11 15:51:42
阅读次数:
179
可能第一眼看上去没什么毛病,BUT getname()里面的get_name是一个字符串数组。在函数return之后这个get_name会释放内存(因为她在栈中,函数执行玩会弹栈)。所以main函数中的name变成了一个野指针,这是一个很危险的操作。 解决办法:返回一个在堆中的地址。 考虑到内存的问 ...
分类:
编程语言 时间:
2017-12-17 11:09:19
阅读次数:
204
Chapter7 内存分配本章将用于在堆或者栈上分配内存的函数。7.1 在堆上分配内存 通常将堆的当前的内存边界称为"program break" 7.1.1 调整program break: brk()和sbrk() 改变堆的大小(即分配或者释放内存),其实就像命令内核改变进程的program b ...
分类:
系统相关 时间:
2017-12-17 00:12:28
阅读次数:
152
栈的大小是可以指定的.Windows程序在编译的时候就可以指定栈的大小.Linux程序栈的大小是通过环境变量设置的.堆是程序员自定义管理的内存.我们上节课学习了malloc这个函数申请内存以及使用free释放内存. 什么时候在栈中使用一个数组?什么时候在堆中使用一个数组? int l_arr[100 ...
分类:
其他好文 时间:
2017-12-16 21:12:36
阅读次数:
139
一. 引言 接着看,把售票的问题给说完,这里涉及到一个小问题。 在我们进行线程任务封装,并进行线程对象创建的时候,我们发现确实通过四个线程能够将一百张票卖完。但是卖票的时候,会不会出现一些小问题呢?分析整个程序给大家展示一下。 现在有四个线程,都到了run方法中来运行。大家都知道,每个线程所属的栈区 ...
分类:
编程语言 时间:
2017-12-13 11:59:22
阅读次数:
185
(1)new和delete用法 如下几行代码: 第一行这个new表达式在自由存储区中分配创建了一个整形对象,并返回一个指向该对象的地址来初始化指针pi。第二行同一行,只是对指针pi指向的地址的值进行了初始化为0。第三行初始化为1024。 当动态创建的对象用完后必须释放内存,避免造成内存泄漏,可以用d ...
分类:
其他好文 时间:
2017-12-01 23:35:06
阅读次数:
246
前言 在C++中,动态内存的管理是通过运算符new和delete来完成的。但使用动态内存很容易出现问题,因为确保在正确的时间释放内存是及其困难的。有时候我们会忘记内存的的释放,这种情况下就会产生内存泄露;有时候又会在尚有指针引用的情况下就用delete释放了内存,这样又会产生引用非法内存的指针(野指 ...
分类:
编程语言 时间:
2017-11-27 18:50:35
阅读次数:
241