Tag: 内存

结构元素的内存分配

嗨,我很难理解如何将内存分配给结构元素。 例如,如果我具有以下结构并且char的大小是1并且int分别是4个字节。 struct temp { char a; int b; }; 我知道结构的大小是8.因为在char之后将有3个字节的填充,并且下一个元素应该以4的倍数放置,因此大小将为8。 现在考虑以下结构。 struct temp { int a; // size is 4 double b; // size is 8 char c; // size is 4 double d; // size is 8 int e; // size is 4 }; 这是上述结构的o / pi size of node is 40 the […]

在内存中明确分配或访问特定地址/位置的值?

我的确切问题是c和c++中有任何规定明确地将值分配给特定地址,例如假设我想将20存储在内存中的0x1846010地址,并且我还想使用相同的地址( 0x1846010 )访问一个值。 可能很容易但我真的很困惑如何做到这一点,如果我们可以。 任何人都可以解释这是可能的,如果是,那么如何(有适当的例子),如果没有那么为什么? 提前致谢。

C中strncpy的内存混淆

本周我的同事讨论了一个关于记忆的问题: 示例代码1: int main() { #define Str “This is String.” char dest[1]; char buff[10]; strncpy(dest, Str, sizeof(Str)); printf(“Dest: %s\n”, dest); printf(“Buff: %s\n”, buff); } 输出: Dest: This is String. Buff: his is String. 示例代码2: int main() { #define Str “This is String.” char dest[1]; //char buff[10]; strncpy(dest, Str, sizeof(Str)); printf(“Dest: %s\n”, dest); //printf(“Buff: %s\n”, buff); […]

C – 文本段中的内存段

有人能告诉我C中的“文本段”是什么,如果可能的话,请给我一个简单的例子吗?

C中的力特定结构尺寸

由于各种原因,我有一些结构我想强制为特定大小(在这种情况下为64字节和512字节)。 然而,两者都低于我希望它们的尺寸。 反正我是否告诉编译器将它们设置为这些特定的大小并用零填充,或者我最好只是在结构中声明构成多余空间的数组,以便它与我想要的大小对齐?

32位处理器真的可以处理2 ^ 32个内存位置吗?

我觉得这可能是一个奇怪/愚蠢的问题,但是这里…… 在问题中,C中的NULL是否需要/定义为零? ,已经确定NULL指针指向不可寻址的内存位置,并且NULL也是0 。 现在,据称32位处理器可以处理2^32内存位置。 2^32只是可以使用32位表示的不同数字的数量。 其中数字是0 。 但是,因为0 ,即NULL ,应该指向什么,我们不应该说32位处理器只能处理2^32 – 1内存位置(因为0不应该是有效地址) ?

设置char *的缓冲区,中间转换为int *

我无法完全理解我在这里阅读的内容的后果: 将一个int指针转换为char ptr,反之亦然 总之,这会有用吗? set4Bytes(unsigned char* buffer) { const uint32_t MASK = 0xffffffff; if ((uintmax_t)buffer % 4) {//misaligned for (int i = 0; i < 4; i++) { buffer[i] = 0xff; } } else {//4-byte alignment *((uint32_t*) buffer) = MASK; } } 编辑 有一个长时间的讨论(在评论中,神秘地删除了)关于指针应该被铸造到什么类型以检查对齐。 现在讨论这个问题 。

是否使用索引括号取消引用它?

为指针使用索引括号是否也取消引用它? 为什么打印这个指针的第0个索引两次最终打印两个不同的东西? #include #include #include using namespace std; int *p; void fn() { int num[1]; num[0]=99; p = num; } int main() { fn(); cout << p[0] << " " << p[0]; }

C中的内存池实现

我在C中寻找一个好的内存池实现。 它应该包括以下内容: 反碎片化。 超级快:) 能够在某个标识符下“捆绑”来自不同大小的多个分配,并删除具有给定标识符的所有分配。 线程安全

memcpy的内部实现如何工作?

标准C函数’memcpy’如何工作? 它必须将(大)RAM块复制到RAM中的另一个区域。 因为我知道你不能在汇编中直接从RAM移动到RAM(使用mov指令)所以我猜它在复制时使用CPU寄存器作为中间存储器? 但它是如何复制的? 通过块(如何通过块复制?),按单个字节(char)或它们具有的最大数据类型(复制在long long double中 – 在我的系统上为12个字节)。 编辑: 好吧显然你可以直接将数据从RAM移动到RAM ,我不是汇编专家,所有我学习的汇编都来自这个文档( X86汇编指南 ),在有关你无法从中移动的mov指令的部分中提及RAM到RAM。 显然这不是真的。