小编shr*_*dur的帖子

自定义malloc实现

最近我被问到一个问题,实现一个非常简单的malloc具有以下限制和初始条件.

#define HEAP_SIZE 2048
int main()
{
    privateHeap = malloc(HEAP_SIZE + 256); //extra 256 bytes for heap metadata

    void* ptr = mymalloc( size_t(750) );

    myfree( ptr );
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

我需要实现mymalloc并myfree在这里使用提供的确切空间.256字节很好地映射到2048位,如果分配了一个字节或者它是空闲的,我可以存储一个位数组.但是当我myfree打电话时ptr,我不知道开始时分配了多少大小.我不能使用任何额外的位.

我似乎认为没有办法解决这个问题,但我一直在重申可以做到这一点.有什么建议 ?

编辑1:

  1. 对齐限制不存在.我以为我不会调整任何东西.
  2. 有一个演示程序执行了一系列的mallocs和释放来测试它,它没有任何小的内存块.但这并不保证任何事情.

编辑2:

文档中的指南:关于代码的某些指南:

  1. 管理私有堆中的堆元数据; 不要在提供的私有堆之外创建额外的链接列表;
  2. 设计mymalloc,myrealloc,myFree为所有可能的输入工作.
  3. myrealloc应该像realloc在C++库中 一样执行以下操作void* myrealloc( void* C, size_t newSize ):
    1. 如果newSize大于块中的大小reallocThis:
      1. 它应该首先尝试分配一个大小的块,newSize以便新的块的基指针也是 …

c c++ memory malloc free

7
推荐指数
2
解决办法
2292
查看次数

如何访问函数返回的多个值(例如,cl:parse-integer)?

我想从字符串中得到三个数字

(parse-integer "12 3 6" :start 0 :junk-allowed t)
12 ;
2
Run Code Online (Sandbox Code Playgroud)

现在这2也会返回,这是可以解析的数字.所以我现在可以给

(parse-integer "12 3 6" :start 2 :junk-allowed t)
3 ;
4
Run Code Online (Sandbox Code Playgroud)

但我怎么保存的价值2和4它返回.如果我setq是到一个变量只12和3存储?

lisp common-lisp multiple-value

7
推荐指数
1
解决办法
457
查看次数

python中的print函数是否有可以打印的字符串长度限制?

我正在尝试打印一个大字符串,它的大小为100 Mb,需要一次完成.看起来它被截断了.

python printing

7
推荐指数
1
解决办法
5033
查看次数

同一地址的变量如何产生2个不同的值?

考虑一下:

#include <iostream>
using namespace std;

int main(void)
{
    const int a1 = 40;
    const int* b1 = &a1;
    char* c1 = (char *)(b1);
    *c1 = 'A';
    int *t = (int*)c1;


    cout << a1 << " " << *t << endl;
    cout << &a1 << " " << t << endl; 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个输出是:

40 65 
0xbfacbe8c 0xbfacbe8c
Run Code Online (Sandbox Code Playgroud)

除非编译器进行优化,否则这对我来说几乎是不可能的.怎么样 ?

c++ casting const undefined-behavior

6
推荐指数
1
解决办法
533
查看次数

如何找到String Literal的地址?

假设我有以下内容:

char *a = "Learning CPP";
char *b = "Learning CPP";
Run Code Online (Sandbox Code Playgroud)

我可以说使用的总内存是sizeof(a)而不是2*sizeof(stringliteral)吗?

因为我对String文字的理解是存储了一个字符串副本.但无论如何,

是不是存储在内存中的a,a + 1,a + 2 ..... a + 12地址之间,而且b,b + 1,b + 2 ... b + 12存储在内存中(12是sizeof串)?

c c++ string string-literals

2
推荐指数
1
解决办法
1196
查看次数