V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  aigebiu  ›  全部回复第 1 页 / 共 2 页
回复总数  31
1  2  
2016-08-02 20:37:38 +08:00
回复了 aigebiu 创建的主题 Android Android 6.0 终端无法启动 hostapd ?
最终解决方案是在 netd 的 SoftApController 里新增了几行 使之读入自定义的一个配置文件 附加在原配置尾部

https://github.com/isofew/mydroid/blob/master/netd.ap.conf.patch
2016-07-10 14:15:06 +08:00
回复了 aigebiu 创建的主题 macOS 如何解析未导出的 OS X 内核符号
唔好吧 找到了一个 fork ( https://github.com/rc0r/KernelResolver ) 没有用固定的 0xffffff8000200000 做起始地址 而是暴力试出来…… 这个版本在 10.10.5 上能测试通过
2016-05-11 09:44:31 +08:00
回复了 mumuy 创建的主题 分享创造 自制的中国亲戚关系计算器
关系:
爸爸的儿子的儿子的爸爸

计算结果:
自己
老公 <--- 德国骨科 2333
哥哥
弟弟
2016-05-06 14:34:28 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@araraloren 嗯是 要不是因为它提供的接口是 vector 我也不愿意这么折腾 自己 malloc free 最方便 谢谢提醒
2016-05-06 12:52:38 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@aigebiu
@araraloren
@3dwelcome 抱歉 刚才仔细看了下 malloc 也有问题,只有静态分配的没问题。(开了个 pool 数组的那个)
@zwzmzd 这样看来,可能确实和堆/栈有关。
2016-05-06 12:04:47 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@3dwelcome 能否详细讲下预留空间不足的问题?为什么同样是小空间,用 malloc 给 vector 开的内存就没问题呢?
2016-05-06 12:02:19 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@araraloren 是,内置类型没有构造一说,所以我在考虑“调 constructor 外还有什么区别”。 27 、 28 楼里提到,在自己实现的 allocator 中,用 new 就有问题,用 malloc 就成功了,说明他俩分到的内存是有区别的。
2016-05-06 11:44:32 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
新发现,如果静态分配 vector 的内存,问题就解决了;如果用 malloc 申请内存,问题也解决了。
看来问题要变成 new 和 malloc 的区别了 233
除了调 constructor 外还有什么区别呢?请教楼上诸位了

输出:
(static) alloc 29 byte(s) at 140733249528912
&vec[0]: 140733249528912, buffer: 140733250577904
dealloc 29 byte(s) at 140733249528912

malloc 29 byte(s) at 35519328
&vec[0]: 35519328, buffer: 140731255293104
free 29 byte(s) at 35519328

就不传 patch 了,静态的大概是这样:
value_type pool[1<<20];
size_type cur = 0;
pointer allocate(size_type num, const void* = 0)
{
pointer p = &pool[cur];
cur += num;
std::cerr << "(static) alloc " << num << " byte(s) at " << (size_type)p << std::endl;
return p;
}

动态( malloc )的大概是这样:
pointer allocate(size_type num, const void* = 0)
{
T* p = (T*)(malloc(num * sizeof(T)));
std::cerr << "malloc " << num << " byte(s) at " << (size_type)p << std::endl;
return p;
}
void deallocate(pointer p, size_type num)
{
std::cerr << "free " << num << " byte(s) at " << (size_type)p << std::endl;
free((void*)p);
}
2016-05-06 11:22:36 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@zwzmzd 这样没问题。但就像我 14 楼提到的,直接在 vec.reserve(MAX_BUFSIZ)也可以修复问题,静态开一个 vector 相当于调 reserve ,仍然是在堆上分配内存吧。而且 new char[] 在堆上也没问题,应该不是堆/栈的原因。

顺便纠正之前的几个错误,一个是 64 位 ub 下是 121 字节临界(之前忘减 14 字节 eth 头了),不过反正这个数的绝对值意义不大,也无所谓。
另一个可能的错误是,之前认为是内存分配的原因,但我自己写了个 allocator ,每次都在全局上 new 内存,问题仍然出现,而且临界大小不变。

我写的 allocator patch : https://gist.github.com/isofew/2ffa93faf6ebe3899de55b87115e1551

@colatin
@kkhaike
@boydfd
@linux40

uint8_t arr[MAX_BUFSIZ] 静态开输出如下:
alloc 29 byte(s) at 30174048
&vec[0]: 30174048, arr: 140734511709248
dealloc 29 byte(s) at 30174048

alloc 128 byte(s) at 30174208
&vec[0]: 30174208, arr: 140734511709248
dealloc 128 byte(s) at 30174208

new uint8_t[size] 动态开输出如下:
alloc 29 byte(s) at 21465952
&vec[0]: 21465952, arr: 21466000
dealloc 29 byte(s) at 21465952

alloc 128 byte(s) at 21466160
&vec[0]: 21466160, arr: 21466304
dealloc 128 byte(s) at 21466160

不管哪种开法,都是&vec[0]小包不行大包可以, arr 全都可以。
2016-05-05 22:46:25 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@ryd994 成功放回
2016-05-05 22:03:01 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@kkhaike 成功将修改后的包放回 netfilter 然后走 routing->forward->postrouting->网卡 出去
现在只是 verdict 传回去了,包的内容没传过去,还是原来的包,走 routing->input->用户进程 这条路了。
4 字节的包一样不行。
2016-05-05 21:06:34 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@Monad 截出一个片段 https://gist.github.com/isofew/3aa6c0eb716655fa60e53e46ae298d56 我觉得还是 stl 实现的问题
2016-05-05 19:53:24 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@boydfd 谢谢!应该是这个原因 vec.reserve() 一下就好了…… 能否具体讲下小块内存的“内存池”?或者相关资料?多谢
2016-05-05 18:18:47 +08:00
回复了 aigebiu 创建的主题 C vector<T> 和 T[] 内存地址区别
@Monad @kkhaike size=vec.size(); 抱歉忘说了

我之所以问内存区别,是推测问题可能跟 vector 分配内存的方式有关(倍增 capacity )
但 new 一个数组也没问题,和静态开的一样 就想不明白了……
2016-04-03 16:46:36 +08:00
回复了 aigebiu 创建的主题 宽带症候群 BT-DHT 被干扰?
@xbb7766 卧槽 几千个。。下种子只能靠离线了
@t895 速度也跑不满 还贵
2016-04-03 16:32:29 +08:00
回复了 aigebiu 创建的主题 宽带症候群 BT-DHT 被干扰?
@xbb7766 是 以前只知道会封 bt tracker 今天才发现 dht 也能干扰-_-#
2016-03-07 22:58:07 +08:00
回复了 aigebiu 创建的主题 C 在学 C++ 有个问题
@bombless 我用 clang 编译也是同样的错诶 我觉得还是把&判断成声明引用了
2016-03-07 21:00:05 +08:00
回复了 aigebiu 创建的主题 C 在学 C++ 有个问题
@matthewgao 哦 谢谢 那 c ++里有没有像 go 语言里的 go 那样的轻量级并发呢?我是一个线程不断读数据 然后动态创建若干线程处理数据 是不是只能维护一个线程池 主线程终止时统一 join 呢?

@ffffwh 为什么会优先判为 declaration ?有没有这方面资料、书推荐呢?谢谢
2016-03-07 20:16:31 +08:00
回复了 aigebiu 创建的主题 C 在学 C++ 有个问题
@patrickstar 可是&后也能正常运行啊 函数指针取不取地址应该是一样的(只有在访问成员函数时好像有区别)

贴个 stackoverflow 上的答案( http://stackoverflow.com/questions/4298654/operator-optional-in-function-pointer-assignment

Operator & is indeed optional when taking the address of a function in your context (assigning it to something). It is not compiler-specific, it follows from the formal definition of the language.

Symmetrically, operator * is optional when invoking the function through a pointer. In your example, you could invoke the function as either (*logfunc)(n) or logfunc(n). You used the latter, but the former would work as well.
2016-03-07 20:10:06 +08:00
回复了 aigebiu 创建的主题 C 在学 C++ 有个问题
难道类(变量) 也是一种声明变量的方式?
比如 string(a); 也能过 得到一个空字符串 a (之前没声明 a )
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   906 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 19ms · UTC 22:30 · PVG 06:30 · LAX 14:30 · JFK 17:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.