r****o 发帖数: 1950 | 1 多谢指正。你说的page fault handler中的文件是hard disk里吗?
我对mmap还有点不懂,我发现它的一个用途是用来把磁盘中的文件映射到内存空间,还
有一个用途是用在malloc里面。不知道这两个用法是不是有什么关 |
|
X****r 发帖数: 3557 | 2 这种面试问题首先要明白他想问你什么。要是他就想问你自己怎么实现内存管理,那你
就不要怕麻烦,反正也就是动动嘴皮子而已。
要说你的方法,其实也是不错的,除了其实不需要这个全局的映射之外。
你直接把返回地址和实际地址之间的偏移量存到返回地址前一个字节就行了。
你还可以指出如果是实际的问题的话基本上不用自己实现。
比如glibc里有memalign和posix_memalign |
|
a***f 发帖数: 45 | 3 int *array = new int(1000000);
应该是 int *array = new int[1000000]; 注意后面的方括号
否者就是分配一个int的空间 |
|
k****f 发帖数: 3794 | 4 就4M的空间,肯定是其他地方的问题
你把代码全部贴出来看看 |
|
d*z 发帖数: 150 | 5 两处错误:
i)分配内存空间偏小
ii)free()传入的参数不是malloc产生的结果
implementation
two |
|
m*t 发帖数: 7490 | 6 例如已经分配了20bytes的一个指针
char *p=(char *)malloc(sizeof(char)*20);
这时用sizeof(p)只能返回 这个指针变量自身的空间大小,32位系统是4,而不是20
不知道有没有什么函数能够返回20这个值? |
|
x*****y 发帖数: 84 | 7 我是编程新新新手。。
老师问,如果你不知道有多少observation,你怎么在一开始就分配内存空间(malloc
)?不能自己suppose一个大小?
我之前是给一个double的指针b分配 b=malloc(sizeof(double)
老师问我,一个double就够了?你怎么知道?
我怎么回答啊 |
|
g*******y 发帖数: 1930 | 8 谢谢了。不过我不是想调试,而是想针对不同的page fault改变default处理从而实现
共享内存空间分布
式系统 |
|
s*w 发帖数: 729 | 9 1. 就是问你是否熟悉常用的 memory error detection tools, 比如 valgrind; 如果
你没
编过大点的程序,显然没用过
2. 不会,貌似出错范围太大了;小程序自然是 step through line by line, 如果
都 load
不进去,大约是没内存空间放 code binary 或者 需要的 global variable 了;似乎
和 stack
没关系
and
program
is |
|
t****t 发帖数: 6806 | 10 前面都对. 最后他的overflow就是stack size不够了, 不是超出申请空间. |
|
|
d****n 发帖数: 1637 | 12 好吧,非要较真。
static in function .那块地方总是你的。
在你把临时内容取走之前,总是安全的。(前提是只有一个thread。多个thread就会有
麻烦。)
用多大,是你自己的事情。
你非要定义长度50, 拷贝100个字符,我也没办法。
用这个定义的最大的好处是--再你知道不会越界的前提下--每次不用分配内存空间。
你不会不知到malloc的时间要所消耗吧?
感兴趣的花自己作个benchmark.看看那个快。
char *func(){ static char * mychar[MAXCHAR]; ;;;; return mychar ;}
char *mallocFun(){chat *ret=(char *)malloc(sizeof(char)*MAXCHAR); return ret
;}
in main
main(){
{
int i;
for(i=0;i<100000;++i)
func();
}
{
int i;
for (i=0;i<100000;++i){
... 阅读全帖 |
|
S***P 发帖数: 194 | 13 那malloc以后,不free,不会造成内存泄露吗?
栈。 |
|
S***P 发帖数: 194 | 14 那我纳闷了,即使这样也不泄漏内存?那要free干啥呀?
#include
#include
int main (int argc, char* argv[])
{
char * buffer;
buffer = (char*) malloc (100000);
if (buffer==NULL) exit (1);
return 0;
} |
|
x****u 发帖数: 44466 | 15 其实现在移动开发中有个趋势是不释放内存而退出,这样可以大大提高效率,节省资源。 |
|
c****p 发帖数: 6474 | 16 B反复malloc free可能不是问题。
问题是可能是数组越界之类的把malloc空间前部的数据corrupt了。
还是查下数组越界吧。 |
|
n**x 发帖数: 606 | 17 本人纯凑绕闹,不倾向任何一方。
系统主要特点:
- 多线程。(老魏没有给出具体多少个线程,假定100个吧。我的12 core intel xeon轻
轻松松100 thread)
- 无锁。
- 单机。
数据结构:
1. 全国1000条线 (X1, X2, X... , X1000), 每条20个区段 (S1, S2, S3... S20)。
2. 每条线的每个区段的票的总数计为:T[X1,S1], T[X1, S2]....... T[X1000, S20]
抢票程序(注意举得例子是联票)
1. 100个thread处理收到的请求
2. 每个请求包括三个参数(线路, 起始站,结束战). 比如(234次列车, 济南, 上
海)。 (注意, 234次列车是从沈阳出发,到上海的, 济南是第5个区的开始,上海最
后一个区段的结束)
3. 计算过程就是把234次列车从济南到上海的每个区段的票数做interlocked.
decrement, 如下:
- Interlocked.Decrement( T[X234,S5] )
- Interlocked.Decrement( T[X234... 阅读全帖 |
|
|
e********3 发帖数: 18578 | 19 传进去的只是b这个reference的value 的copy,在主程序里面b仍然指向那个内存空间
,不会变的。python是pass-by-value,period。 |
|
h****r 发帖数: 2056 | 20 这个不足为奇,产生新的thread的时候,预先给thread分配stack空间(这个是在heap
里面),
8M, 4M,2M,1M, 512k都是常用的size,这一步在调用clone之前发生。 |
|