Tag: 管理

static const char * const和static const char 有什么区别?

可能重复: char a [] =“string”有什么区别; 和char * p =“string”; 数组版本是否会分配数组内存,因此一个100字节的字符串将在常量部分使用100个字节,在静态数组上使用100个字符,或者它将仅使用100个字节? 和指针版本一样,除了字符串的100个字节之外,还会为指针分配字大小,还是将指针优化为常量段地址?

囤积内存分配器

囤积内存分配器 我正在阅读有关Hoard内存分配器的文章,一切都是可以理解的,但有一点不是,它可以减少多个线程分配或释放内存时引起的堆争用,避免了内存分配器可以引入的错误共享同时,它对碎片应用严格的界限。 他们是如何实现的?

stack&realloc问题C ++

int main() { char myString = NULL; realloc(&myString, 5); strncpy((char *)&myString, “test”, 5); } 似乎工作正常,但我仍然有点困惑堆栈与堆,这是允许的吗? myString是否需要手动释放,还是在超出范围时被释放? 编辑:感谢您的回复,所以我认为这同样是非法的 //I want the code to change myString to “tests” char myString[5] = “test”; realloc(&myString, strlen(myString)+2); myString[4] = ‘s’; myString[5] = ‘\0’;

了解联合的内存内容

假设我定义了一个这样的联合: #include int main() { union u { int i; float f; }; union u tst; tst.f = 23.45; printf(“%d\n”, tst.i); return 0; } 有人能告诉我tst存储的内存会是什么样的? 我想了解这个程序产生的输出1102813594 。

realloc调用引入了多少开销?

我在for循环的每次迭代中使用realloc ,迭代次数超过10000次。 这是一个好习惯吗? 如果多次调用realloc会导致错误吗?

没有MMU的内存保护

我想知道如何在没有MMU支持的情况下保护内存。 我试图谷歌,但没有看到任何有价值的论文或研究。 那些处理它的人只会处理bug,例如未初始化的指针,而不会因软错误导致内存损坏,也就是说,由于硬件瞬态故障会破坏写入内存位置的指令。 我想知道这个的原因是因为我正在开发一个没有任何内存保护的专有多核平台。 现在我的问题是,软件可以用来保护内存,特别是由于软错误导致的疯狂写入(而不是程序员的错误)。 任何有关这方面的帮助将非常感激。

是否可以将不同的数据类型存储在C中相同的已分配内存中?

我想在同一个分配的内存中存储不同的数据类型,以便通过仅分配一次内存来减少执行时间。 我发现实际上可以创建一个uint8_t变量数组并创建一个指向同一内存地址的新uint16_t指针,然后我可以双向读取这些值。 这允许我创建一个指针,让我们说分配内存的中间,并将值存储在后半部分的不同数据类型中。 可以这样做吗? 我知道我需要关注内存边界,但这种风格是不是很糟糕? 这是我的代码: #include #include #include #include int main(void){ uint8_t *array; uint16_t *array2; array = calloc(6, 1); array[0] = 257; printf(“array[0]= %” PRIu8 “\n”, array[0]); printf(“array[1]= %” PRIu8 “\n”, array[1]); printf(“Adresse von array[0] = %p\n”, &array[0]); array2 = &array[0]; printf(“Adresse auf die array2 zeigt = %p\n”, array2); array2[0] = 257; printf(“array2[0]= %” […]

内存应用程序布局

以下问题对我来说是一个令人头疼的问题。 假设我有两个平台具有相同的硬件,相同的操作系统和相同的编译器。 如果我编译完全相同的应用程序,我可以确定两台机器上的内存布局完全相同吗? 换句话说,两个应用程序都具有相同的虚拟地址空间,或者很可能不是这种情况。 谢谢你对此的看法!

内存映射显示的RAM多于实际可用内存

我正在研究一个小的x86内核。 我正在访问并尝试读取GRUB在多引导头中提供的内存映射。 我有一个Intel i3 cpu和4 GiB的RAM。 在这台机器上运行时,我正在阅读以下内存映射: –Base Address– –Length– –Type– 0x0000000000000000 0x000000000009d000 0x1 0x000000000009d000 0x0000000000003000 0x2 0x00000000000e0000 0x0000000000020000 0x2 0x0000000000100000 0x00000000bb53f000 0x1 0x00000000bb63f000 0x0000000000080000 0x2 0x00000000bb6bf000 0x0000000000100000 0x4 0x00000000bb7bf000 0x0000000000040000 0x3 0x00000000bb7ff000 0x0000000000001000 0x1 0x00000000bb800000 0x0000000004800000 0x2 0x00000000e0000000 0x0000000010000000 0x2 0x00000000feb00000 0x0000000000004000 0x2 0x00000000fec00000 0x0000000000001000 0x2 0x00000000fed10000 0x0000000000004000 0x2 0x00000000fed18000 0x0000000000002000 0x2 0x00000000fed1b000 0x0000000000005000 […]

用于测试C和C ++分配器的基准测试?

请建议用于测试C和C ++分配器的基准测试? 满足以下任何方面的基准被认为: 速度 碎片 并发 谢谢!