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);
} |
|
|
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))))...
|