Redian新闻
>
请问CVS的胖子和厂家的胖子以下情况怎么合用
avatar
请问CVS的胖子和厂家的胖子以下情况怎么合用# PennySaver - 省钱一族
g*o
1
问大家一道题,CISCO的。说是要实现一个myMalloc(),每次分配固定的size。固定
的size做起来应该简单不少。解法应该是用两个list,一个记录用过的,一个记录free
的,如果free的有,就把free的头结点去掉,加到used list的头部。假设可以用
malloc一次分配一个MAX_SIZE的大block,如何实现myMalloc和myFree?
这方法是我在事后想到的,不过我在如何初始化这个free list的时候卡住了。请问记
录free list如何初始化,是用n个结点的data来记录每一块内存的位置吗?
avatar
c*0
3
今天打到一张2刀Off any HUGGIES Baby Wipe Tub or Refill的胖子,本来有一张任何
该牌子wipe减2刀的胖子,想买cvs价格为3.49刀的wipe,请问可以用这两张胖子合用一
起买一个产品吗?再增加一个别的东西,比如1刀的饼干什么的,再加几角钱现金不知
道可以操作吗?人家会让我买吗?
avatar
r*e
4
固定size的相对容易
都不需要额外的list structure,直接在free memory block里做记录
对于每一个free block
在首地址处记录下一个free block的地址,形成一个embedded link list
初始状态:
全局变量FirstFreeBlock指向大block的首地址
对n = MAX_SIZE/size 个blocks,初始化其首地址使其形成链表
myMalloc操作:
rtn = FirstFreeBlock
FirstFreeBlock = FirstFreeBlock->next
return rtn
myFree:
addr->next = FirstFreeBlock
FirstFreeBlock = addr

free

【在 g********o 的大作中提到】
: 问大家一道题,CISCO的。说是要实现一个myMalloc(),每次分配固定的size。固定
: 的size做起来应该简单不少。解法应该是用两个list,一个记录用过的,一个记录free
: 的,如果free的有,就把free的头结点去掉,加到used list的头部。假设可以用
: malloc一次分配一个MAX_SIZE的大block,如何实现myMalloc和myFree?
: 这方法是我在事后想到的,不过我在如何初始化这个free list的时候卡住了。请问记
: 录free list如何初始化,是用n个结点的data来记录每一块内存的位置吗?

avatar
x*3
5
无年费的应该转不了点数把.
avatar
g*n
6
ymmv
avatar
b*7
7
#define BLOCK_SIZE 1024
#define ALIGN(size,unit) (((size)+(unit-1))/(unit)*(unit))
struct ChunkHead{
ChunkHead * next;
};
#define CHUNK_SIZE ALIGN(sizeof(ChunkHead) + BLOCK_SIZE, sizeof(int))
ChunkHead * firstChunk;
void initChunk(void * addr, size_t size)
{
firstChunk = NULL;
Chunk * pre = NULL;
for(int i = 0; i < size/CHUNK_SIZE; i++)
{
ChunkHead * cur = (ChunkHead *)(addr + i* CHUNK_SIZE);
if( pre != NULL)
pre->next = cur;
else
firstChunk = cur;
pre = cur;
}
if(pre != NULL) pre->next = NULL;
}
void * myMalloc()
{
if(firstChunk == NULL) return NULL;
void * result = firstChunk + sizeof(ChunkHead);
firstChunk = firstChunk->next;
return result;
}
void myFree(void * addr)
{
if(addr == NULL) return;
ChunkHead * cur = (ChunkHead *)(addr - sizeof(ChunkHead));
cur->next = firstChunk;
firstChunk = cur;
}
avatar
u*k
8
是啊,但是我很奇怪为什么没有无年费版的了呢

【在 x**********3 的大作中提到】
: 无年费的应该转不了点数把.
avatar
l*u
9
你跟别的东西一直买就行了
avatar
g*o
10

谢谢!

【在 b******7 的大作中提到】
: #define BLOCK_SIZE 1024
: #define ALIGN(size,unit) (((size)+(unit-1))/(unit)*(unit))
: struct ChunkHead{
: ChunkHead * next;
: };
: #define CHUNK_SIZE ALIGN(sizeof(ChunkHead) + BLOCK_SIZE, sizeof(int))
: ChunkHead * firstChunk;
: void initChunk(void * addr, size_t size)
: {
: firstChunk = NULL;

avatar
p*y
11
那张鸡肋卡,肯定没什么人申请。不受欢迎就取消了呗
avatar
i*4
12
政策规定不能overage。
avatar
g*o
13

谢谢!!!3楼的代码好像正确!

【在 r*******e 的大作中提到】
: 固定size的相对容易
: 都不需要额外的list structure,直接在free memory block里做记录
: 对于每一个free block
: 在首地址处记录下一个free block的地址,形成一个embedded link list
: 初始状态:
: 全局变量FirstFreeBlock指向大block的首地址
: 对n = MAX_SIZE/size 个blocks,初始化其首地址使其形成链表
: myMalloc操作:
: rtn = FirstFreeBlock
: FirstFreeBlock = FirstFreeBlock->next

avatar
z*3
14
当年拿过无年费版的点数,现在再申csp还能拿点么?
avatar
b*o
15
如果小二肯手动将cvs的胖子调到1.49就可以用,不过很可能小二不愿意。。。
avatar
g*o
16

能不能解释一下没有这句话会怎么样?:
#define ALIGN(size,unit) (((size)+(unit-1))/(unit)*(unit))

【在 b******7 的大作中提到】
: #define BLOCK_SIZE 1024
: #define ALIGN(size,unit) (((size)+(unit-1))/(unit)*(unit))
: struct ChunkHead{
: ChunkHead * next;
: };
: #define CHUNK_SIZE ALIGN(sizeof(ChunkHead) + BLOCK_SIZE, sizeof(int))
: ChunkHead * firstChunk;
: void initChunk(void * addr, size_t size)
: {
: firstChunk = NULL;

avatar
x*i
17
I have the 2 off CVS coupon too, but no MFC.
avatar
b*7
18
内存对其用的,最常见的按4字节对齐,若不对齐,会导致cpu取数据时多次寻址,效率
有影响。

【在 g********o 的大作中提到】
:
: 能不能解释一下没有这句话会怎么样?:
: #define ALIGN(size,unit) (((size)+(unit-1))/(unit)*(unit))

avatar
t*8
19
大胆地试一下
avatar
y*1
20
有个疑惑。 谁能解释一下啊? 谢谢
void initChunk(void * addr, size_t size)
中的 addr 有什么用啊? 是通过malloc返回的地址吗?
谢谢

【在 b******7 的大作中提到】
: #define BLOCK_SIZE 1024
: #define ALIGN(size,unit) (((size)+(unit-1))/(unit)*(unit))
: struct ChunkHead{
: ChunkHead * next;
: };
: #define CHUNK_SIZE ALIGN(sizeof(ChunkHead) + BLOCK_SIZE, sizeof(int))
: ChunkHead * firstChunk;
: void initChunk(void * addr, size_t size)
: {
: firstChunk = NULL;

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。