由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 菜鸟请教C问题
相关主题
奇怪的问题:关于一个简单的malloc()小程序 (转载)在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
Windows下多个DLL之间memory allocation问题什么是OS Memory management and heap structure?
purify和valgrind的比较怎样高效管理内存?
effective C++里的memory pool 一问:一个简单的问题
急问:这个为什么不行?VC++ 中的 memory leak problem
C++里面 class的数据成员的顺序是什么样的?问一个private destructor的问题
array allocation in ca=(char **)malloc(12*sizeof(char *)) 是什么意思?
"brk()" 和 mmap() 有什么区别? (转载)再问一个free()的问题
相关话题的讨论汇总
话题: aligned话题: malloc话题: alignment话题: size话题: void
进入Programming版参与讨论
1 (共1页)
h****a
发帖数: 10
1
实现下面二个函数
void * aligned_malloc(size_t bytes, size_t alignment);
void aligned_free(void * p);
要求:
may only use the C runtime functions malloc and free in their implementation
and cannot use any static memory. aligned_malloc takes the size of the
buffer you would like to allocate and also alignment which is a power of two
that will force the starting address of the buffer you return to the user
to start on an alignment boundary. aligned_free frees the buffer returned
from aligned_malloc.
我是这么写的,不
d*z
发帖数: 150
2
两处错误:
i)分配内存空间偏小
ii)free()传入的参数不是malloc产生的结果

implementation
two

【在 h****a 的大作中提到】
: 实现下面二个函数
: void * aligned_malloc(size_t bytes, size_t alignment);
: void aligned_free(void * p);
: 要求:
: may only use the C runtime functions malloc and free in their implementation
: and cannot use any static memory. aligned_malloc takes the size of the
: buffer you would like to allocate and also alignment which is a power of two
: that will force the starting address of the buffer you return to the user
: to start on an alignment boundary. aligned_free frees the buffer returned
: from aligned_malloc.

h****a
发帖数: 10
3

多谢指点,只是不明白free函数,我还以为是调用它时将malloc产生的结果作为参数传
递进去。

【在 d*z 的大作中提到】
: 两处错误:
: i)分配内存空间偏小
: ii)free()传入的参数不是malloc产生的结果
:
: implementation
: two

t****t
发帖数: 6806
4
你以为得挺对啊,但是你的程序写出来不是这么回事啊

【在 h****a 的大作中提到】
:
: 多谢指点,只是不明白free函数,我还以为是调用它时将malloc产生的结果作为参数传
: 递进去。

h****a
发帖数: 10
5

不明白,你指的是得另外写个函数来调用malloc 和 free 么?

【在 t****t 的大作中提到】
: 你以为得挺对啊,但是你的程序写出来不是这么回事啊
E*V
发帖数: 17544
6
你的p的地址不对

【在 h****a 的大作中提到】
:
: 不明白,你指的是得另外写个函数来调用malloc 和 free 么?

p****s
发帖数: 32405
7
不是, malloc和free至少应该对齐一个对象/地址吧,
否则有啥意义?

【在 h****a 的大作中提到】
:
: 不明白,你指的是得另外写个函数来调用malloc 和 free 么?

j********r
发帖数: 21
8
I guess this may work, oh well not sure if I understand the problem
correctly.
void * aligned_malloc(size_t bytes, size_t alignment)
{
int total_allocated_size = bytes;
// make # of allocated bytes up to aligned boundary
total_allocated_size += bytes % alignment;
return malloc(total_allocated_size);

};
void aligned_free(void * p)
{
free(p);
};
j********r
发帖数: 21
9
I was wrong on total_allocated_size calculation.
LOL
j****g
发帖数: 597
10
while (1)
{
if ((buf =(char*) malloc(byte)) == NULL)
exit 1;
if (buff % alignment)
break;
else
free(buf);
}
相关主题
C++里面 class的数据成员的顺序是什么样的?在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
array allocation in c什么是OS Memory management and heap structure?
"brk()" 和 mmap() 有什么区别? (转载)怎样高效管理内存?
进入Programming版参与讨论
p**********g
发帖数: 9558
11
total_allocated_size += (bytes % alignment)?alignment-(bytes%alignment):0;

【在 j********r 的大作中提到】
: I guess this may work, oh well not sure if I understand the problem
: correctly.
: void * aligned_malloc(size_t bytes, size_t alignment)
: {
: int total_allocated_size = bytes;
: // make # of allocated bytes up to aligned boundary
: total_allocated_size += bytes % alignment;
: return malloc(total_allocated_size);
:
: };

t****t
发帖数: 6806
12
你这个未免太瞎搞了

【在 j****g 的大作中提到】
: while (1)
: {
: if ((buf =(char*) malloc(byte)) == NULL)
: exit 1;
: if (buff % alignment)
: break;
: else
: free(buf);
: }

p**********g
发帖数: 9558
13
没有幽默感,面试过不了

【在 t****t 的大作中提到】
: 你这个未免太瞎搞了
j****g
发帖数: 597
14
er...好像写错了
应该是
if (! (buf % alignment) )
break;
随便写写给大家扩展思路。老看标准答案多没意思。实际上根据现在编译器优化水平和
实际应用里给的alignment,我这个的效率未必低啊。
记得以前上过一门课里提到knuth大人给出过一个最慢排序算法,
O(3^(2^(2^(2^2n))))...

【在 t****t 的大作中提到】
: 你这个未免太瞎搞了
f*******y
发帖数: 988
15
最慢排序好像以前也有比赛的
要求算法必须有解释的
当然比较主观

【在 j****g 的大作中提到】
: er...好像写错了
: 应该是
: if (! (buf % alignment) )
: break;
: 随便写写给大家扩展思路。老看标准答案多没意思。实际上根据现在编译器优化水平和
: 实际应用里给的alignment,我这个的效率未必低啊。
: 记得以前上过一门课里提到knuth大人给出过一个最慢排序算法,
: O(3^(2^(2^(2^2n))))...

t****t
发帖数: 6806
16
你居然是认真的
问题在于, 你分配了一看不对再释放, 下次分配的多半是同一个地址, 不就死循环了么.

【在 j****g 的大作中提到】
: er...好像写错了
: 应该是
: if (! (buf % alignment) )
: break;
: 随便写写给大家扩展思路。老看标准答案多没意思。实际上根据现在编译器优化水平和
: 实际应用里给的alignment,我这个的效率未必低啊。
: 记得以前上过一门课里提到knuth大人给出过一个最慢排序算法,
: O(3^(2^(2^(2^2n))))...

1 (共1页)
进入Programming版参与讨论
相关主题
再问一个free()的问题急问:这个为什么不行?
[合集] 谁给个stack-based allocation 的C++的例子?C++里面 class的数据成员的顺序是什么样的?
突然发现现在很反感malloc了array allocation in c
new一定要和delete配对吗?"brk()" 和 mmap() 有什么区别? (转载)
奇怪的问题:关于一个简单的malloc()小程序 (转载)在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
Windows下多个DLL之间memory allocation问题什么是OS Memory management and heap structure?
purify和valgrind的比较怎样高效管理内存?
effective C++里的memory pool 一问:一个简单的问题
相关话题的讨论汇总
话题: aligned话题: malloc话题: alignment话题: size话题: void