Tag: 内存

易变量

哪个是存储在程序存储器中的易失性变量(在哪个部分)?

打印数组元素内存对应C和C ++,为什么输出不同?

可能重复: 使用std :: cout时如何模拟printf的%p格式? 我尝试用C和C ++打印出数组元素的内存地址。 在C: char array[10]; int i; for(i =0; i<10;i++){ printf(" %p \n", &array[i]); } 我得到了内存地址: 0xbfbe3314 , … 但是,如果我尝试在C ++中做同样的事情: char array[10]; for(int i =0; i<10;i++){ std::cout<<&array[i]<<std::endl; } 我得到了这个输出: P ķ 为什么会有所不同? 我应该在C ++中以不同方式使用cout来打印出内存地址吗? 我该如何打印出内存地址?

将float转换为字符串而不使用sprintf()

我正在编写基于微控制器的应用程序,我需要将float转换为字符串,但我不需要与sprintf()相关的繁重开销。 有没有雄辩的方法来做到这一点? 我不需要太多。 我只需要2位数的精度。

C最佳实践,堆栈与堆分配

我最近一直在使用ca,并发现我真的不喜欢处理内存管理,或者至少我认为如果我malloc指针我必须释放它,即使它是最琐碎的事情。 这导致我尽可能多地在堆栈上分配并使用&来获取它的位置。 甚至制作单独的int和inptr变量(我在宏中使用&运算符时出现了一些左值问题)。 我没有找到很多地方我必须处理分配它的数据(上/下)。 与此同时,我需要相当数量的早期回报(而且我宁愿避免使用)。 一般的c意见是什么? 在特定情况下我是否应该使用其中一个或另一个明显的迹象。 PS让我有点担心的一件事是,我最近因为使用了错误的sizeof for malloc而出现了内存损坏问题而且我没有立即注意到它,因为我的大部分代码路径直接在那之后没有使用堆。 你认为这种腐败隐藏的问题有多大?

在C中,是否需要在退出处释放指针?

可能重复: 退出C应用程序时,是否自动释放了malloc-ed内存? 在C中,是否需要在退出处释放指针? 当程序存在时,是否从指向仍然指向已分配块的指针释放内存? 它依赖于操作系统吗?

当使用gcc-5.2.0编译程序时,为什么valgrind没有发现泄漏

今天我正在编写一些东西,在我完成之后,我与valgrind进行了检查,我得到了一个惊喜。 如果我使用gcc-4.9.2在我的Ubuntu(15.04 64BIT)上编译我的程序,如下所示: gcc -Wextra -Werror -Wstrict-prototypes -Wconversion –std=c11 -O2 -g program.c -o program 然后运行valgrind: valgrind –leak-check=full –track-origins=yes ./program 我得到以下输出: ==5325== Memcheck, a memory error detector ==5325== Copyright (C) 2002-2013, and GNU GPL’d, by Julian Seward et al. ==5325== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info ==5325== Command: ./program ==5325== Bye ==5325== […]

嵌入式C中的动态内存分配

我可以在嵌入式C中使用malloc和delete函数吗? 例如,我有一个函数,其中在函数malloc的结构上创建了指针。 这个函数在ram中返回地址,我可以使用它。 退出我的function,在那里分配了内存,这个指针将被删除或者这个内存为此保留,而不会被函数删除终止? Typedef struct { Char varA; Char varB } myStruct ; Void myfunc ( void) { myStruct * ptrStruct = ( myStruct *) malloc ( sizeof (myStruct)) ; // Code here //…….. return ; }

C中枚举值的内存位置

我想我已经在某处读过,在C中取一个枚举值的地址是非法的 (枚举值不是左值;但是,我现在找不到任何关于此的信息)。 这是正确的,如果是的话,为什么? 编辑: 这是一个例子,用上面的“枚举值”来澄清我的意思。 我的意思是取下面的first_value的地址,而不是获取枚举的实际实例的地址: enum myenum { first_value, second_value };

何时在C ++中从内存中删除变量?

我现在一直在使用C ++。 我只是不确定内存管理是如何工作的,所以在这里: 我首先不确定如何在函数中分配内存,例如: int addTwo(int num) { int temp = 2; num += temp; return num; } 所以在这个例子中,函数结束后是否会从内存中删除? 如果没有,这是怎么做到的。 在C#中,一旦变量用完,变量就会被删除。 还有其他我应该知道的案例吗? 谢谢

释放atexit()

在atexit()函数中释放内存有什么意义吗? 我有一个全局变量,在启动后获得malloc。 我可以编写一个atexit()函数来释放它,但是当程序退出时,系统是不是要回收所有内存? 整洁和积极清理自己有什么好处吗?