最近我被问到一个问题,实现一个非常简单的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,我不知道开始时分配了多少大小.我不能使用任何额外的位.
我似乎认为没有办法解决这个问题,但我一直在重申可以做到这一点.有什么建议 ?
mallocs和释放来测试它,它没有任何小的内存块.但这并不保证任何事情.文档中的指南:关于代码的某些指南:
mymalloc,myrealloc,myFree为所有可能的输入工作.myrealloc应该像realloc在C++库中
一样执行以下操作void* myrealloc( void* C, size_t newSize ):
newSize大于块中的大小reallocThis:
newSize以便新的块的基指针也是 …我想从字符串中得到三个数字
(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存储?
我正在尝试打印一个大字符串,它的大小为100 Mb,需要一次完成.看起来它被截断了.
考虑一下:
#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)
除非编译器进行优化,否则这对我来说几乎是不可能的.怎么样 ?
假设我有以下内容:
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串)?