Tag: 内存

如何为堆栈变量分配内存?

在VS(发布)上,我运行以下命令: int main(void) { char b[] = “123”; char a[] = “1234567”; printf(“%x %x\n”, b,a); return 0; } 我可以看到,a的mem地址是b + 3(字符串的长度)。 这表明内存没有间隙。 这保证了使用最少的记忆。 所以,我现在有点相信所有编译器都会这样做。 我想在这里确定这个猜测。 有人可以给我一个更正式的证据,或者告诉我,我的猜测是根源于巧合。

使用malloc,struct和char *堆积腐败

我的C程序中似乎有内存损坏。 我用_ASSERTE( _CrtCheckMemory( ) ); 找到问题陈述,它在一行上说明了scep_conf->engine_str = NULL; 就在它之前。 所以,如果我理解正确,那之前的malloc就会破坏一些东西,对吗? 所以这是导致问题的代码的一部分: scep_conf = (SCEP_CONF *) malloc(sizeof(scep_conf)); scep_conf->engine = (struct scep_engine_conf_st *) malloc(sizeof(struct scep_engine_conf_st)); scep_conf->engine_str = NULL; 标题中的定义: typedef struct { struct scep_engine_conf_st *engine; char *engine_str; } SCEP_CONF; struct scep_engine_conf_st{ char *engine_id; char *new_key_location; int storelocation; char *dynamic_path; char *module_path; int engine_usage; }; SCEP_CONF *scep_conf; 基本上我不明白为什么它会破坏我的记忆。 […]

测量记忆的延迟

我正在经历这个链接 ,他们正在处理主存储器,L1和L2缓存的延迟的统计数据。 我想知道是否可以使用C / c ++代码计算相同而不使用基准测试工具?

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

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

C:函数的返回地址(mac)

以下简短c程序: void foo(int a, int b) { printf(“a = %pb = %p\n”, &a, &b); } main() { foo(1, 2); } 好的,现在我用gdb来查看这个程序。 我得到了输出: a = 0x7fff5fbff9ac b = 0x7fff5fbff9a8 并在输出后停止执行(在foo()中)。 现在我检查了0x7fff5fbff9ac,内容是: 1 ….正确 那么0x7fff5fbff9a8和内容: 2 …正确 现在我想查看函数的返回地址并检查(a + 4个字节): x / g 0x7fff5fbff9b1(8字节!!地址,因此“g”(巨字)) 其内容是: (gdb) x/g 0x7fff5fbff9b1 0x7fff5fbff9b1: 0xd700007fff5fbff9 但是:这不是主要的回报! 我的错在哪里?

为什么变量指针包含相同数据类型的地址?

指针声明的一般语法: data-type *pointer_name; 指针是一个变量,其值是另一个变量的地址,即存储器位置的直接地址。 与任何变量或常量一样,必须先声明指针,然后才能使用它来存储任何变量地址。 指针的数据类型必须与指针指向的变量相同。 为什么指针变量应该包含相同数据类型的变量的地址很重要? 由于指针与另一个变量的值无关,为什么整数指针不能具有float数据类型变量的地址? 正确forms: int a = 10; int * ptr =&a; 错误,类型不匹配 漂浮一个; int * ptr; ptr =&a;

C – 指针内存分配

有人可以向我解释之间的区别 int *x = malloc(sizeof(int)); && int *x = (int*)malloc(sizeof(int)); 谢谢!

查看释放的内存会导致访问冲突吗?

可以访问(只读)释放的内存会导致访问冲突,如果是,在什么情况下?

两个程序共享C内存

我有2个程序作家和读者。 编写器应该创建共享内存,然后将结构数组保存到那段内存中…读者应该使用那段内存并能够输出作者在内存中保存的内容。 我非常努力输出更多,然后只是数组的第一部分,所以我甚至不确定数组是否正确保存到共享内存,所以我说我会在这里发布我的代码,也许有人可以帮助我出… 作家: #include #include #include #include #include #include #include #include #include #include #include “header.h” int main() { key_t key = 1234; int shmid; int i = 0; int p; struct companyInfo * pdata[4]; for (i = 0; i companyName,”AIB”); pdata[0]->sharePrice = 11.2; strcpy(pdata[1]->companyName,”BOI”); pdata[1]->sharePrice = 10.2; strcpy(pdata[2]->companyName,”TSB”); pdata[2]->sharePrice = 9.2; printf(“name is %s […]

__attribute __((__ align__))不使用静态变量

这让我疯了好几天。 如果我将它声明为static我无法将数组对齐到16。 任何帮助非常感谢。 经过修改的版本: #include #include #define MAX_INPUTS 250 int main() { float input[MAX_INPUTS] __attribute__ ((__aligned__(16))); printf(“Address of input: %p\n”, input); printf(“Assert1: %x\n”, ( ((int) (input)) ) ); printf(“Assert2: %x\n”, ( ((int) (input)) % 16 ) ); printf(“Assert3: %x\n”, ( ((int) (input)) % 16 ) == 0 ); assert ( ( ((int) (input)) ) ); […]