由买买提看人间百态

topics

全部话题 - 话题: malloc
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
i****d
发帖数: 255
1
来自主题: Programming版 - 再问:关于多维数组的malloc
// 定义二维数组的指针
double **zzz;
int i, j, irow = 100, icol = 4;
// 有两种方式malloc
// 第一种
zzz = (double**) malloc( sizeof(double) * irow * icol) );
for(i=0; i zzz[i] = (double *) malloc( sizeof(double) * icol) );
// 第二种
zzz = (double**) malloc( sizeof(double*) * irow) );
for(i=0; i zzz[i] = (double *) malloc( sizeof(double) * icol) );
*******************************************
感觉第二种方式好理解:先定义一个指针数组zzz[irow];然后让里面的各个指针指向
一个个一维数组,即zzz[0]存储第0列的首地址,等等。
但第一种方式不好理解:感觉开辟了两份内存。
请指教!
n********r
发帖数: 719
2
比如之前定义了一个结构体A
A里有一个二维数组a
现在调用malloc分配一段内存空间给一个指针变量B
发现B的值和A.a是一样的
出现这个问题最可能的原因是什么呢?多谢指点!
对了, 有一点不知道有没有关系,中间B曾经反复malloc和free过,就像这样:
int *B;
for(int i=0; i B=malloc(...);
... //do something
free(B);
B = malloc(...);
... //do something
free(B);
}
B = malloc(...);
free(B);

l*******G
发帖数: 1191
3
来自主题: Programming版 - 再问:关于多维数组的malloc
can we use the second method to define multiple-dimension arrays (>2)?
i.e. something like
int idim1=100;
int idim2=200;
int idim3=300;
int idim4=10;
zzz = (double**) malloc( sizeof(double*) * idim1) );
for(i=0; i zzz[i] = (double **) malloc( sizeof(double) * idim2) );
for(j=0; j zzz[i][j]=(double **) malloc( sizeof(double) * idim3) );
for(k=0; k zzz[i][j][k]=(double **) malloc( sizeof(double) * idim4) );
}
}
}
h********m
发帖数: 116
4
来自主题: JobHunting版 - 再问一个C的malloc( )
一般什么时候需要用malloc()呢?一般情况下不都可以直接定义么?比如说:
int *a = malloc(10*sizeof(int));
我直接定义 int a[10]不就行了。其他的数据结构也差不多巴,
谁能给个例子什么时候必须用malloc呢?感觉很麻烦啊,用完了还要free。
i****d
发帖数: 35
5
来自主题: JobHunting版 - 再问一个C的malloc( )
我给个例子吧。。。
再次之前先更正一下。。
int *a = malloc(10*sizeof(int)); 是不对的

int *a = (int *)malloc(10*sizeof(int));
另外,因为malloc分配的内存在堆上,需要手动free。但是a[10]分配的内存在stack上
,会自动被销毁的。。所以,你设想有这么一个函数。。
int *randomArray(int n);
让你生成一个大小为n的array,里面都是随机数,返回。你用啥?
h**o
发帖数: 548
6
来自主题: JobHunting版 - 问一道题 实现malloc
c programming language 2 Edition P164-167.
有代码及详解。
主要是把所有空闲block 用 single link list 穿起来。每个node of list 包括:{
此空闲block的总size,
指向下一个空闲block的指针,
这个空闲block本身(根据此node的指针和此空闲block的总size可以推算出这个block
是那一段)
}
malloc就是把某个空闲block从靠近尾部开始截断。截掉的那段就是想分的长度,分给
malloc的caller, 然后把这个空闲block的总size减去截掉的size.
free 就是把分给malloc的那段在link list找到适当位置重新糊上去。

is
q*****g
发帖数: 1568
7
来自主题: Programming版 - 关于malloc/free和循环
假设说我用malloc分配了一些内存给变量v:
double * v = (double *) malloc ( 10 * sizeof(double));
现在开始一个循环,其中v每次的值都不一样,那么我是不是需要
在循环体内free之(当然这就意味着也得再循环体内定义它)?
完整一点的例子在这里:
int main ()
{
double data[10] = {1,2,3,4, 5,6,7,8,9,10};
double * v = (double *) malloc ( 2 * sizeof(double));
int i;
for (i = 0; i < 5; i++)
{
v = &data[2*i];
printf("%f\n", v[1]);
}
return 0;
}
d*******u
发帖数: 186
8
来自主题: JobHunting版 - how to implement malloc?
From c programming language:
typedef long Align; /* for alignment to long boundary */
union header { /* block header */
struct {
union header *ptr; /* next block if on free list */
unsigned size; /* size of this block */
} s;
//The Align field is never used; it just forces each header to be
aligned on a worst-case boundary.
Align x; /* force alignment of blocks */
};
typedef union header Header;
static Header base; /* empty list to get started */
static Header *fr... 阅读全帖
b****g
发帖数: 192
9
void func(int *ptr)
{
ptr = (int *)malloc(sizeof(int) * 10);
}
void main(void)
{
int *ptr = 0;
for(int i=0; i<10; i++)
{
func(ptr);
}
}
问题:for循环里面的func(ptr)都干了些什么?
我回答分配了10次,每次10个整形的空间。
又问:main()函数要怎么改才能free由malloc()分配的的空间?
我就不回了。
p****U
发帖数: 109
10
来自主题: JobHunting版 - 问一道题 实现malloc
实现malloc咋实现阿。。面试遇到傻傻的站着不知道咋写。 面试官也不太nice 不给提
示, 东欧人也口音非常重, 交流也成问题。
implement:
void * malloc(size_t len);
by calling void *requestPages(int n) //n is number of pages
freePages(void *ptr); // assume each page is
1k.
f******e
发帖数: 164
11
【 以下文字转载自 Linux 讨论区 】
发信人: francise (小飞猫), 信区: Linux
标 题: 奇怪的问题:关于一个简单的malloc()小程序
发信站: BBS 未名空间站 (Sun Mar 30 17:43:48 2008)
我写了一段小程序:
#include
#include
int main(int argc, char *argv[]){
char *buffer;
int num_byte;
num_byte = atoi(argv[1])*1024;
while(1)
{buffer=malloc(num_byte);
free(buffer);
}
}
然后我用
strace ./code 126
结果是:
....
brk(0) = 0x804965c
brk(0x8068e74) = 0x8068e74
brk(0x8069000) = 0x8069000
(Nothing further)
为什么只有有限的几个brk()?
问题是,我的程序明明是无限循环啊
m*****e
发帖数: 4193
12
First, only the first malloc *could* call brk() since you free it
immediately.
Second, if your existing brk is big enough even the first would not call brk
().
Third, if you malloc() big enough memory, it may does a mmap() instead of
allocating from heap.
c****p
发帖数: 6474
13
B反复malloc free可能不是问题。
问题是可能是数组越界之类的把malloc空间前部的数据corrupt了。
还是查下数组越界吧。
p*****m
发帖数: 31
14
【 以下文字转载自 Linux 讨论区 】
【 原文由 problem 所发表 】
如题,我们的程序是用标准C写的.
在sun/hp/alpha上都没有问题,但是在linux上编译后
运行某一case时会在调用malloc时死掉.
有关信息是:
Program received signal SIGSEGV, Segmentation fault.
0x400b8929 in chunk_free (ar_ptr=0x40156c00, p=0xb7c09274) at malloc.c:3115
不知哪位大狭能提供帮助?
其他平台上用的都不是gcc,
linux上用的是gcc2.95-2,
os 为 redhat 7.0
(2.2.16-22 )
我怀疑是不是编译时结构变量是否要双字对齐或者类似的问题,
还是linux os的问
因为在sun下作过purify,没有内存问题
br />
b********e
发帖数: 215
15
来自主题: JobHunting版 - 谁能贴一下implement malloc的code
给定buffer的指针,实现malloc and free,网上搜了一下,doug lea有一个版本,但太
过复杂,谁能贴一下简单一点的,应付面试的。谢谢。
d**f
发帖数: 264
16
来自主题: JobHunting版 - 问个malloc问题
int *pInt = (int*)malloc(100*sizeof(int));
pInt++;
free(pInt);
Except mem leaking, is there any other problem ?
My suspicion is free() will mark the out of boundary mem location. So the
behavior will be undefined.
f****g
发帖数: 313
17
来自主题: JobHunting版 - 问个malloc问题
Might need to judge whether malloc is successful or not
h***n
发帖数: 276
18
来自主题: JobHunting版 - 问个malloc问题
check pInt right after malloc
q******8
发帖数: 848
19
来自主题: JobHunting版 - 问个malloc问题
Should check malloc after allocating.
G***n
发帖数: 877
20
来自主题: JobHunting版 - A malloc/free question using C/C++
Hi,
I have a question using C. I want to
allocate the memory using realloc() or
malloc() inside a function fun(), the
return of this function is the pointer
pointing to the allocated memory. There
is no free() inside fun(), because I
need to grasp the allocated memory in
fun() by its return.
In the main function, I define char
*pStr= fun() to call this function and
then try to free pStr later using
free(pStr). The program runs forever at
free(pStr) there. However, if I do not
use free() function... 阅读全帖
M7
发帖数: 219
21
来自主题: JobHunting版 - 再问一个C的malloc( )
你在不知道需要多大的数组的时候,就要用malloc.
比如数组的大小是user输入的一个整数。
D*****3
发帖数: 2683
22
来自主题: JobHunting版 - 再问一个C的malloc( )
malloc is dynamic
int a[10] is static
Read more about memory allocation, this is pretty basic question
h********m
发帖数: 116
23
来自主题: JobHunting版 - 再问一个C的malloc( )
关于这个casting,我刚刚看了wiki:
http://en.wikipedia.org/wiki/Malloc
用不用都行啊,各有优缺点。我写了个test没用,也没报错。
M7
发帖数: 219
24
来自主题: JobHunting版 - 再问一个C的malloc( )
这些概念太基本了,如果你一定要用C, 那你还是要补习一下这些东西。
如果不一定要用C, 还是用C++的vector,省去你malloc/free的麻烦。
h********m
发帖数: 116
25
来自主题: JobHunting版 - 再问一个C的malloc( )
我还是不太清楚,比如说:如果我要动态生成一个size n的什么data type,我就直接
用定义,比如说 datatype[n]不就行了么,为啥要malloc(n*sizeof(datatype))呢?
M7
发帖数: 219
26
来自主题: JobHunting版 - 再问一个C的malloc( )
只有当n是const的时候,datatype[n]才行。
对于一般变量n, datatype[n]不能通过编译,因为compiler对n的大小一无所知,所以无
法在stack里生成数组。
malloc的数组在heap里.
C***n
发帖数: 452
27
来自主题: JobHunting版 - 关于malloc.
谁有malloc/free用sbrk实现的代码,能不能贴一个?
谢谢
C***y
发帖数: 2546
r*****e
发帖数: 146
29
来自主题: JobHunting版 - how to implement malloc?
如何实现 malloc?对于面试而言,应该写到什么深度? 谢谢!
d*******u
发帖数: 186
30
来自主题: JobHunting版 - how to implement malloc?
问题是malloc, free很复杂,好像不太可能用30~50行程序实现。
y*******g
发帖数: 6599
31
来自主题: JobHunting版 - how to implement malloc?
看需要怎么实现吧,我记得c programming language那本书也有一个例子关于malloc的
好像没太复杂
y*****e
发帖数: 4
32
这样不行吧? ptr 里是malloc出来的地址么?
c*b
发帖数: 3126
33
void func(int **ptr)
{
*ptr = (int *)malloc(sizeof(int) * 10);
}
void main(void)
{
int *ptr = 0;
for(int i=0; i<10; i++)
{
func(&ptr);
free(ptr);
}
}
f*****d
发帖数: 209
34
来自主题: JobHunting版 - 问一道题 实现malloc
就是自己做内存管理,你要维护一个未分配内存和已分配的内存的表。
malloc ==> 未分配 -> 已分配
free ==> 已分配 -> 未分配

is
e*******s
发帖数: 1979
g*********e
发帖数: 14401
36
来自主题: JobHunting版 - 问一道题 实现malloc
requestPage就是当前的free block都不够大了,再request一个新的。
不过如果malloc要求的空间大于1k,就挺难弄的。
这题还可以继续考free block如何管理,从而使得fragmentation尽量减少,以及free
的内存如何粘贴到已有的block里。问这种题的人脑子都不好使,铁了心搞你。
q*n
发帖数: 1203
37
来自主题: Programming版 - 关于malloc/free和循环
memory leak happens because
data -> memory block 1
v -> memeroy block 2
v = data
what happens to memeory block2? it's address is lost and not accessible
anymore, thus the memory leak.
Anytime you malloc a piece of memory, you need to free it later, simple as
that.
q*****g
发帖数: 1568
38
来自主题: Programming版 - 关于malloc/free和循环
这个当然是一个更大的程序中的一个例子而已。。。。
是这样的:我要用MPI实现parallel computing,这样的话就需要从process 0 送出去
一些数据(double[n][m])。这些矩阵的大小只有在runtime 才知道,所以必须手动
分配内存。
我简化一下,就是这么一个东西:有一个大的data(一个长数组好了,反正matrix也是
数组),只有process 0 知道。然后它把这个数组分成一段一段的子数组,分别送给
process 1, proc 2, ....。
这样的话我就得在循环的时候(或者之前,whatever)定义一个v,用来存放那个
子数组。我的想法是:
data:
[ ..........................]
^ ^
[ ...]
v
v的长度事先用malloc给定,然后把v的起点定为 &data[k]即可。然后proc 0 就把
这个v送出去;
到了下一个循环,v的长度是一样的,但起点不同了。

space
q*n
发帖数: 1203
39
来自主题: Programming版 - 关于malloc/free和循环
memory leak happens because
data -> memory block 1
v -> memeroy block 2
v = data
what happens to memeory block2? it's address is lost and not accessible
anymore, thus the memory leak.
Anytime you malloc a piece of memory, you need to free it later, simple as
that.
q*****g
发帖数: 1568
40
来自主题: Programming版 - 关于malloc/free和循环
这个当然是一个更大的程序中的一个例子而已。。。。
是这样的:我要用MPI实现parallel computing,这样的话就需要从process 0 送出去
一些数据(double[n][m])。这些矩阵的大小只有在runtime 才知道,所以必须手动
分配内存。
我简化一下,就是这么一个东西:有一个大的data(一个长数组好了,反正matrix也是
数组),只有process 0 知道。然后它把这个数组分成一段一段的子数组,分别送给
process 1, proc 2, ....。
这样的话我就得在循环的时候(或者之前,whatever)定义一个v,用来存放那个
子数组。我的想法是:
data:
[ ..........................]
^ ^
[ ...]
v
v的长度事先用malloc给定,然后把v的起点定为 &data[k]即可。然后proc 0 就把
这个v送出去;
到了下一个循环,v的长度是一样的,但起点不同了。

space
n******t
发帖数: 4406
41
来自主题: Programming版 - 关于malloc/free和循环
不用,你过一会malloc就fail了,你怎么分.
s*****n
发帖数: 956
42
来自主题: Programming版 - a malloc quesiton
How to use malloc and returns a starting memory location which is a multiple
of 32?
X****r
发帖数: 3557
43
来自主题: Programming版 - a malloc quesiton
Isn't that an old question?
One solution is always to malloc 32 more bytes of memory.

multiple
P*****f
发帖数: 2272
44
来自主题: Programming版 - a malloc quesiton
google "memalign implementation"

How to use malloc and returns a starting memory location which is a multiple
of 32?
t****t
发帖数: 6806
45
malloc == brk?????
p*******n
发帖数: 273
46
来自主题: Programming版 - 问一个c语言malloc的问题
在子程序中用p=(float *)malloc(sizeof(float)*80),子程序返回时,会不会自动释
放内存?.
w***g
发帖数: 5958
47
来自主题: Programming版 - 突然发现现在很反感malloc了
写了一阵C++,又回过头来写C,发现现在特别反感malloc. 最近写了一个系统,几乎全
都用静态分配的变量,然后把数组上限写在一个头文件里便于修改。剩下所有的缓存分
配在程序启动时用一个mmap搞定,然后自己分成相同大小的小块自己管理。这样系统用
多少内存在程序启动的时候就定了,运行过程中一直都不会增加,最多就是预先分配的
缓存不够时系统会变慢。这个系统写完我觉得非常爽,感觉自己水平又提高了。
s****n
发帖数: 786
48
来自主题: Programming版 - 突然发现现在很反感malloc了
你反感malloc什么?碎片?颗粒度?效率?
今天的帖子搞不好都是玩笑
w***g
发帖数: 5958
49
来自主题: Programming版 - 突然发现现在很反感malloc了
我是希尔瑞斯的. 对于out-of-core算法而言, 内存永远是不够的. 这就是为什么必须
一开始就分配所有可用的内存了. 如果你看过数据库方面的论文, 就知道性能评测很重
要的一点就就是内存--性能曲线. 比如你虽然有16GB内存, 但是你想看只用2GB内存时的
系统性能, 用malloc貌似很难限制程序只用2GB内存. 但是如果自己分配内存, 可以实现
一个带阻塞功能的内存分配机制.内存不够了流水线中的某一步就会暂时挂起等待空闲内
存, 或者开始释放cache页面. 还有一个好处就是可以尽量避免操作系统的文件系统缓存
和swapping对算法性能的影响. 因为程序最多可能用到的内存在程序启动的时候就定了
(当然不能写递归算法啦), 可以用mlock把所有分配的地址锁定在内存中.
所有正经的数据库服务器都会自己实现内存管理和磁盘空间管理, 这肯定是有它的道理
的.
R***Z
发帖数: 1167
50
来自主题: Programming版 - 突然发现现在很反感malloc了
Embedded system里有时会需要这样做。不少情况下你device的specification是固定的
,所以预先就知道需要多少内存,与其让malloc到时候分配内存,还不如先allocate这
么多内存然后分配好。要知道有些embedded OS的内存管理可不像desktop电脑那么聪明
,碎片真的会是个问题

from
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)