V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  verrickt  ›  全部回复第 10 页 / 共 12 页
回复总数  225
1 ... 2  3  4  5  6  7  8  9  10  11 ... 12  
2018-05-27 14:51:39 +08:00
回复了 whoami9894 创建的主题 C 请教一个 C 语言内存分配的问题
@whoami9894 还是没看懂你的意思。
针对这个情况画了张[简略的图]( https://www.draw.io/?lightbox=1&target=blank&highlight=0000ff&edit=_blank&layers=1&nav=1&title=Untitled%20Diagram.xml#R7Vtdb%2FMmFP41SO2kVrbx52XcpNvFXmlSJ227pAlJ3Doms0mTvr9%2BYOMvIInbOKnbNRctPmA%2BnvMcOBwwgHer3a8pWi9%2FkBmOgWXMdgCOgWWZhm2xf1zyWkgczykEizSaiUK14CH6ics3hXQTzXDWKkgJiWm0bgunJEnwlLZkKE3Jtl1sTuJ2q2u0wIrgYYpiVfpXNKPLQupbXi3%2FDUeLZdmy6QZFziOaPi9SsklEe8CC8%2FxXZK9QWZcYaLZEM7JtiOAEwLuUEFqkVrs7HHNsS9iK9%2B735Fb9TnFCu7wAixdeULwRQ%2F8T76joG30t8chHhPk7BoDhdhlR%2FLBGU567ZQxgsiVdxezJZElRJU4p3u3tllkNlpEIkxWm6SsrUr7gCHwEf2wonre1NsySLMuGJgIhQ4IAi6rqGgSWEDjoMfEUTMaIosFhYnXFxDJ6AMVXQHmgjOuDQ8XpCIrp9wBKoICy890byGRuzNoJH1OWWvAUmPggCEAwAhMHBHcgNPLEGLBuTDwwCkDIslgBD4S2AirlNtlCLqMpecZ3JCYpkyQkYSXDeRTHkgjF0SJhj1MGJ2bykIMdsYluJDJW0WzGm9Gqqq3MHrRlSRR2VW35GmXZzum6KknQUJaCM05mI756cMBilGXRVMdXPFMWj6PjbwzQ0QywlKU4RjR6aVevG7Vo4Q8SsYZrY5DwdSyJ5BnZpFMs3mouC0cqcqV6KEoXmCr15DqoRt1NLaaiFmNniN%2FXNQRbUpSpGoKtncp7MARLg%2Fi9%2BH1dxI%2BvE2cDXHWyvtzMU03bErxvnXjkeion5wwzj6OqZeKCkQF8ny%2FOoQ9GHk%2BMLBBM8sWZCe95mcAFYZAv4AYIzA42k%2BIs%2Boke8wKcz2ve%2F3xETgic8ZusJUaPOA6rfUZpdfVO44C5iP2S6Amo6N3iETxoRzfGLdNS0NKSeRqHyiJkPs%2FwyWp1j1vbpZ1Ux%2FFunWPTT7XmttxUr48JSN3RDBCSiozHMenDHVR999Jrn0UvLWzcfzd8Ox5ys74RdjpiJWI8p3Vu5emLWrI1SkpZQfMVipKr6zKfdbBZpCHO229L%2B%2B8S8MKP6QlacTIlj9k6fzY0ogKuiGeWy%2F8AuvQL%2B%2FdU9KlZpvgbDamXz1Uvr7jkeoXimEyv2BKEyZyLrq8H0V2KM3p1ga5oyD8eiBm%2BEDYhVUgMo08fNjWoPelEI1lUTB%2BbygikGeSTDqg13fCFqxrf5kuMz9iWA5LLHxxZU9ZxtusOkK7kcGYjpfBX3bp7nrS5rFzHhquoDRyysqe7iprYdzRA%2F7nrlkLemr8HEqiJYMwW%2BEE8kpQuyYIkKJ7UUokXDTjwLqJ%2FCzFP%2F8PTbHTsKWEdq7L4Q533hCl9FUeHaEMJE9Xt%2Fk7I%2Bo2hEzaaPEghlC72B0W8oUkEVSWd972dGaduTp4GyDjT6Eg5OXz8Hkycs1DO3E8589KUg%2BVJd4Ny0D2RcvmrozRFr40CIvy0N5rnScFSM5BOkY%2BUd8UOvVZt0YP3xnSgekjw8SePGnvQHGedzR5gh6jyxSGxZUhczcGGFpLqfO4kTNSQbuEN8lit7wPf5WFcn6XH%2FNQ1GAHfzrNcLuSh3jEI%2FM8MYx8npVAXQVXd1nch281zHQDgjuph6gHvg7aqg7n5eEzUAK3pX256s%2BE5lvsheZhQ42HCS3mYUPUwX4ZIOe%2BSlHPPQbkheZjlZNWinHMhypWNNyi3HSDlILwk5dSZX4EkW6I1T85jvBN3BELtdYGMqZUevEXQDPWo58XDvV1gB4qWAsnR6XrBQK2qWtb6v2Jg7z9kbPo%2FPPrf8JqUOwjvjvd9pmsH9p6lT9Rk3FpOeWYrFHcDTyNXr9cOHHV2%2B7bkbubXmyU7Uk39GbKjBiB%2BoCg5aLRfyjodQ8%2Ba%2BlKQCa22Nm7cIZlnh2jJt3kyF7gdyPPl85POxilV5MrhnR5tU3OPT7PIFt9w%2FB9WUufwBT5uqrClHHtIhtrh%2Bt63oVq2dIHclr%2Fx6Wyo8k3089mpegtR%2FwnRJ7e%2BPSc2lfUZwQcujOyx%2FriwKF5%2FwQkn%2FwE%3D)

代码如下:

``` c
int main()
{
int i =0;
int* j = &i;
int* k = (int*)malloc(sizeof(int));
test();
}
void test()
{
int u = 0;
int& v = u;
int w = (int*)malloc(sizeof(int));

}
```

当前执行的是`int w = (int*)malloc(sizeof(int));`。
Data 和 Stack 的内存是完全分开的。函数里定义的变量都是局部变量,分配在当前栈帧上。当函数返回后,栈帧回弹,局部变量的存储空间就被回收。当`test`执行完成,返回到`main`时,u,v,w 的存储空间就被回收了。

但是 Data 区的内存并不会因为函数返回就被回收,而是需要你自己去调用 free。


> 您好还想请教一下:像您说的那种情况,应当如何避免返回局部变量的地址呢?是直接传变量的副本作返回值吗?
直接返回*值*是一种办法,但 C 中传参的拷贝语义,有时为了避免拷贝比较大的结构,也可以让调用者传指针进来,这样可以避免拷贝。还有一种方法,在被调函数中使用 malloc 分配内存。这三种方法孰优孰劣要看具体的情况。我只用过 C 写玩具,也就没法给你建议了。

第二种方法大概是这样的
``` c
typedef struct
{
int[500] a
} very_big_structure;
int main()
{
very_big_structure t;
callee(&t);
}
void callee(very_big_structure* ptr)
{
//使用 ptr
ptr->a[0]=4;
}

```
2018-05-27 12:59:37 +08:00
回复了 SergeGao 创建的主题 问与答 目前有可以手机外接键鼠+显示器的解决方案吗?
额,没看到只能用 OTG。楼主忽略我吧
2018-05-27 12:58:34 +08:00
回复了 SergeGao 创建的主题 问与答 目前有可以手机外接键鼠+显示器的解决方案吗?
continuum 了解一下。然而 Windows Mobile 10 已经死了
2018-05-27 12:55:02 +08:00
回复了 whoami9894 创建的主题 C 请教一个 C 语言内存分配的问题
malloc 分配的内存是在堆上的(进程地址空间的 data 区),需要显示 free

> 但我在 void 函数中初始化一块内存,函数调用结束后这个指针也变成未定义了

没理解你的意思,如果是这样
``` c
int* ub()
{
int i;
return &i
}
```
的话,i 实际是分配在栈上的局部变量,函数返回后栈帧弹出,试图访问&i 的已经是未定义行为(ub)了。

总结来说,搞明白地址在栈上还是堆上就可以判断栈帧回弹之后使用指针是不是 ub 了
2018-05-24 07:12:19 +08:00
回复了 snsd 创建的主题 问与答 除了开飞机,国内现在使用 onedrive 的方法还有吗?
移动内网,无任何设置上下行都能跑满 50Mbps
跑个题,[]arr 在 golang 里叫切片(slice),数组是[int]arr 这样的。var arr = [] int{2,3,3}等价于 var p=[3]{2,3,3} var arr = make(p,3)。
slice 作为数组的 wrapper,提供了一种统一的数组访问形式。具体细节请参阅官方文档
2018-05-23 17:36:27 +08:00
回复了 q8164305 创建的主题 问与答 为什么说异步 io 快
2l 说到点上了。
这是我以前学习异步时候看过的一片博客,虽然是讲 C#的,但是基本原理是相通的
https://blog.stephencleary.com/2013/11/there-is-no-thread.html
2018-05-18 07:29:11 +08:00
回复了 q9REUgpVVCU77pWj 创建的主题 程序员 XLServicePlatform 到底需不需算不算流氓?
所以我把所有需要 uac 权限的应用都丢到沙箱里了,你应用程序爱怎么折腾怎么折腾,反正我用完了你就得不留痕迹的死。
沙箱外只用 uwp 和开源软件。
2018-05-05 11:23:02 +08:00
回复了 wjm2038 创建的主题 分享发现 Windows 10 最新内测版把看样子是要强行推 Edge 啊
其实,新的 tab 可以打开打开其他 UWP 的。
Ms 做这个功能的本意应该是 把完成同一件事情打开的一系列 app 聚合在一起,我觉得叫 Set 很能表现意图了。
@kamen 亲测 B 站国际版是有免流入口的,鬼畜区看不了倒是事实
2018-04-27 23:27:18 +08:00
回复了 xiaoyu9527 创建的主题 全球工单系统 百度的 putty 会自动安装爱奇艺和毒霸
你需要包管理。无脑安利 chocolatey.org
2018-04-23 17:42:05 +08:00
回复了 v2byy 创建的主题 游戏 使用手柄玩 FPS 游戏体验好多了
感觉手柄比较适合非硬核的设计类游戏。无主之地 2,无主之地前传是我玩过的手感一流的了。硬核向的要看厂商调教,安利一波光环 5
2018-04-21 23:38:44 +08:00
回复了 SlipStupig 创建的主题 程序员 如何实现一个分布式排序
归并排序?
wpf+1,不过我是 uwp 找不到工作转过来的。上班摸鱼写了一些.net core 感觉不错,.net standard + .net core 随便跨平台,比较爽。如果还想搞客户端开发的话可以关注下 xaml standard。
我打算往服务器端发展。对 golang 比较感兴趣。楼主如果喜欢 async / await 的话可以考虑往高并发方向发展
2018-03-29 18:01:51 +08:00
回复了 gaocc 创建的主题 问与答 java8 出很久了没用过 Lambda 表达式,问怎么用?实际好处是?
配合 JDK8 的 java.util.stream 用过。stream+lambda 凑合凑合当 LINQ 用,大量数据做排序筛选分组啥的操作还是很爽的
各大国产流氓的 UWP 版本。虽然功能不全但是一个个都老实的不行
2018-02-26 11:00:32 +08:00
回复了 soastao 创建的主题 硬件 24 寸以下 4k 显示器除了 P2415Q 还有其他选择吗
@noe132 您好,请教下
- 13 寸完美 200 缩放 2732 1536
这个结论是如何得出来的,如果是 pc 的话,同样尺寸的显示器完美缩放也需要相同的分辨率吗
2018-02-10 12:47:34 +08:00
回复了 lockelee 创建的主题 程序员 开发一个网站专门用于大家吐槽瓜皮代码如何
1 ... 2  3  4  5  6  7  8  9  10  11 ... 12  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2056 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 08:46 · PVG 16:46 · LAX 01:46 · JFK 04:46
Developed with CodeLauncher
♥ Do have faith in what you're doing.