由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个c++ struct和指针问题
相关主题
问一个关于C++指针的问题Python Q: function pass in struct pointer, come back with data filled
问个C++中重复删除指针的问题C 里面有办法永久改变一个指针的属性吗?
一道c++的考古题difference between: char** p and char*p[] ??
这个月在用c++造轮子,从一维数组开始造C++ pointer problem
不如各位高手挑个专题讲讲C++11吧请教一个const pointer的问题
one more interview question这段code有啥问题?
c++ questionC++ Q87: What is wrong with this swap function? (转载)
一道很奇怪的面试题c++指针的问题
相关话题的讨论汇总
话题: pointer话题: 指针话题: struct话题: pixel话题: byte
进入Programming版参与讨论
1 (共1页)
N******K
发帖数: 10202
1
struct pixel
{
double a // 8 byte
double b // 8 byte
}
auto pointer = new pixel[10]
pointer += 9
这个计算 是怎么实现的
是不是 逻辑上相当于 **pointer += 9*16
**pointer是指针的值 uint64类型 内存单元为byte
A*****i
发帖数: 3587
2
多年不用C++了auto是嘛玩意?auto_ptr么?
N******K
发帖数: 10202
3
不用手动写出类型 编译器自动识别

【在 A*****i 的大作中提到】
: 多年不用C++了auto是嘛玩意?auto_ptr么?
b*******s
发帖数: 5216
4
新关键字,有点类似动态类型特性的,但实际上不是

【在 A*****i 的大作中提到】
: 多年不用C++了auto是嘛玩意?auto_ptr么?
N******K
发帖数: 10202
5
这好东西 一下子代码就干净了

【在 b*******s 的大作中提到】
: 新关键字,有点类似动态类型特性的,但实际上不是
b*******s
发帖数: 5216
6
不管是原生的还是stl,指针加都是加sizeof(T),所以如果容器里实际进去的是派生类,
你要当心了

【在 N******K 的大作中提到】
: struct pixel
: {
: double a // 8 byte
: double b // 8 byte
: }
: auto pointer = new pixel[10]
: pointer += 9
: 这个计算 是怎么实现的
: 是不是 逻辑上相当于 **pointer += 9*16
: **pointer是指针的值 uint64类型 内存单元为byte

b*******s
发帖数: 5216
7
嗯,如果不滥用,比如给一个auto赋值为另一个已有的auto,这个破坏可读性的

【在 N******K 的大作中提到】
: 这好东西 一下子代码就干净了
A*****i
发帖数: 3587
8
我擦,这是要动态语言的节奏么?
妈蛋啊
b*******s
发帖数: 5216
9
17标准马上可能要有可选的gc了,怕不怕?

【在 A*****i 的大作中提到】
: 我擦,这是要动态语言的节奏么?
: 妈蛋啊

A*****i
发帖数: 3587
10
操,老子还是喜欢挪指针啊,要GC去找爪哇好吗,没节操的
相关主题
one more interview questionPython Q: function pass in struct pointer, come back with data filled
c++ questionC 里面有办法永久改变一个指针的属性吗?
一道很奇怪的面试题difference between: char** p and char*p[] ??
进入Programming版参与讨论
b*******s
发帖数: 5216
11
可选模式,而且不一定委员会会批,就是个别人在鼓吹

【在 A*****i 的大作中提到】
: 操,老子还是喜欢挪指针啊,要GC去找爪哇好吗,没节操的
N******K
发帖数: 10202
12
boost 里面有没有?

【在 b*******s 的大作中提到】
: 可选模式,而且不一定委员会会批,就是个别人在鼓吹
b*******s
发帖数: 5216
13
现在还木有,我对此表示不赞成 :)

【在 N******K 的大作中提到】
: boost 里面有没有?
a***n
发帖数: 538
14
c++/clr有gcnew
z****g
发帖数: 75
15
type inference, c++11

【在 N******K 的大作中提到】
: struct pixel
: {
: double a // 8 byte
: double b // 8 byte
: }
: auto pointer = new pixel[10]
: pointer += 9
: 这个计算 是怎么实现的
: 是不是 逻辑上相当于 **pointer += 9*16
: **pointer是指针的值 uint64类型 内存单元为byte

N******K
发帖数: 10202
16
有gc了 怎么用指针? 是不是就没指针了

【在 b*******s 的大作中提到】
: 现在还木有,我对此表示不赞成 :)
N******K
发帖数: 10202
17
我说的是具体实现 pointer += 9 是纯加法计算 还是加法和乘法计算

【在 z****g 的大作中提到】
: type inference, c++11
b*******s
发帖数: 5216
18
gc只是一种pattern,你觉得c++会绑死在一种pattern上么? c++就算有gc也不会是jav
a那种基于jvm的,多半是一种类似内存池,然后根据ref count判定可否利用的那种,没
有新的分配需求,不会人为搞个什么工作线程去干预的

【在 N******K 的大作中提到】
: 有gc了 怎么用指针? 是不是就没指针了
b*******s
发帖数: 5216
19
sizeof * num

【在 N******K 的大作中提到】
: 我说的是具体实现 pointer += 9 是纯加法计算 还是加法和乘法计算
z****g
发帖数: 75
20
先infer出来type, 然后那个type几个字节,就自动算了
你这个 express的语义就是:移动这个类型的指针向前9个单位,单位是编译器静态
type inference出来的
相关主题
C++ pointer problemC++ Q87: What is wrong with this swap function? (转载)
请教一个const pointer的问题c++指针的问题
这段code有啥问题?C++的smart pointer注定是个二流的东西
进入Programming版参与讨论
b*******s
发帖数: 5216
21
对,sizeof是编译期决定的

【在 z****g 的大作中提到】
: 先infer出来type, 然后那个type几个字节,就自动算了
: 你这个 express的语义就是:移动这个类型的指针向前9个单位,单位是编译器静态
: type inference出来的

a***n
发帖数: 538
22

jav
,没
boost的shared ptr就是,不是一般的慢。

【在 b*******s 的大作中提到】
: gc只是一种pattern,你觉得c++会绑死在一种pattern上么? c++就算有gc也不会是jav
: a那种基于jvm的,多半是一种类似内存池,然后根据ref count判定可否利用的那种,没
: 有新的分配需求,不会人为搞个什么工作线程去干预的

b*******s
发帖数: 5216
23
慢?不太可能,下次我来写个帖子分析下shared_ptr的设计吧

【在 a***n 的大作中提到】
:
: jav
: ,没
: boost的shared ptr就是,不是一般的慢。

a***n
发帖数: 538
24

用cpu profiler看一下用就知道ref count有多耗时了。

【在 b*******s 的大作中提到】
: 慢?不太可能,下次我来写个帖子分析下shared_ptr的设计吧
N******K
发帖数: 10202
25
那种开销 可以直接忽略
我对比过 for{ new delete} vs for {shared_ptr} 10000个对象 似乎是1~2秒的差
别(改天我再跑一下 更新一下这个数字)

【在 a***n 的大作中提到】
:
: 用cpu profiler看一下用就知道ref count有多耗时了。

b*******s
发帖数: 5216
26
嗯,有空了我先做个benchmark,先介绍下你怎么做的?

【在 a***n 的大作中提到】
:
: 用cpu profiler看一下用就知道ref count有多耗时了。

a***n
发帖数: 538
27

曾今调试一个新手的程序,发现5%的时间是ref count。其实也没有什么太过分,不过
显然不够快。

【在 b*******s 的大作中提到】
: 嗯,有空了我先做个benchmark,先介绍下你怎么做的?
t****t
发帖数: 6806
28
这个看怎么用了. 如果完全无脑见一个copy一个, 那肯定开销大没话说. 但是多数情况
下不需要.

【在 a***n 的大作中提到】
:
: 曾今调试一个新手的程序,发现5%的时间是ref count。其实也没有什么太过分,不过
: 显然不够快。

d****n
发帖数: 1241
29
* 首先,struct的大小依赖于两个因素,一是field的大小,二是field的alignment,
这两个都是由ABI决定的,比如在64位的机器上,如果编译器选择遵守gcc/llvm所支持
的x86_64 ABI标准,那么double是8byte对齐,如果在32位的机器上,linux下gcc支持
的x86 abi是4byte对齐. 大小的话,double类型都是8 bytes. 在缺省情况下,如果某
个field不符合对齐标准,那么编译器会插入padding bytes,让这个field符合对齐的
标准。比如:
struct S {
char f1; // size是1,对齐是1
int f2; // size是4,对齐也是4
};
sizeof(struct S)是8,因为编译器会在f1后,加入3个padding bytes, 让f2符合对齐
的规范。
* 如果在定义struct的时候,添加了类似packed的attribute, 那么编译器会忽略对齐
的要求。
* auto跟动态类型没有关系,在你的例子里,pointer类型是编译器在静态的时候,根
据一定的类型推导规则,自动推导出来的,跟定义
pixel *pointer = new pixel[10];
一样,在你使用pointer的时候,pointer就是这个类型;
* pointer += 9计算之后,pointer会指向数组pixel第10个元素.
pointer加一,表示移动一个sizeof(pixel)距离

【在 N******K 的大作中提到】
: struct pixel
: {
: double a // 8 byte
: double b // 8 byte
: }
: auto pointer = new pixel[10]
: pointer += 9
: 这个计算 是怎么实现的
: 是不是 逻辑上相当于 **pointer += 9*16
: **pointer是指针的值 uint64类型 内存单元为byte

b*******s
发帖数: 5216
30
真牛人来了,出来拜一下

【在 t****t 的大作中提到】
: 这个看怎么用了. 如果完全无脑见一个copy一个, 那肯定开销大没话说. 但是多数情况
: 下不需要.

相关主题
琢磨了一下c++ smart pointer,发现不能到处用问个C++中重复删除指针的问题
C++问题: 指针变量是哪里产生的?一道c++的考古题
问一个关于C++指针的问题这个月在用c++造轮子,从一维数组开始造
进入Programming版参与讨论
z****g
发帖数: 75
31
这个效率一般是个小问题
用shared ptr 让人觉得没有明确得ownership,概念不清楚,不符合C++程序员
对确定性的期待,搞的堕落成Java,不喜欢
不过个别时候也没更好的选择

【在 t****t 的大作中提到】
: 这个看怎么用了. 如果完全无脑见一个copy一个, 那肯定开销大没话说. 但是多数情况
: 下不需要.

N******K
发帖数: 10202
32
我举个例子
矩阵加法 每个都是1024x0124大小
A=B+C+D
具体这样 temp1=B+C; temp2=temp1+D; A=temp2;
这里面很多数据共享的问题
比如 简单的 A=B;
A是一个矩阵 A=B 是不是要把所有元素都复制一遍? 显然不用
A.data=B.data; 就行了
A.data 可以是 shared_part
如果要对A只做读操作 A不用重新分配一块内存
如果要对A做写操作 那就测试一下A.data有没有别人在用 还有人用的话 那就复制一块
A重新分配一块内存 复制A.data指向的数据
当然 你要搞多线程 多个线程写一个矩阵 会出问题 你要加锁
锁。lock()
测试一下A.data有没有别人在用 还有人用的话 A重新分配一块内存
锁。unlock()
不过 数值计算一般不会这么搞
如果B没用了 析构函数里面 {data.reset()} 就可以了 不会把数据真给删掉了

【在 z****g 的大作中提到】
: 这个效率一般是个小问题
: 用shared ptr 让人觉得没有明确得ownership,概念不清楚,不符合C++程序员
: 对确定性的期待,搞的堕落成Java,不喜欢
: 不过个别时候也没更好的选择

N******K
发帖数: 10202
33
这也是我为什要自己写matrix类的原因 因为可能要多线程等等
eigen类库有个搞笑的bug 还不好意思说是bug
a=a.transpose(); 这个结果就会出错 不知道怎么搞的

【在 N******K 的大作中提到】
: 我举个例子
: 矩阵加法 每个都是1024x0124大小
: A=B+C+D
: 具体这样 temp1=B+C; temp2=temp1+D; A=temp2;
: 这里面很多数据共享的问题
: 比如 简单的 A=B;
: A是一个矩阵 A=B 是不是要把所有元素都复制一遍? 显然不用
: A.data=B.data; 就行了
: A.data 可以是 shared_part
: 如果要对A只做读操作 A不用重新分配一块内存

d****i
发帖数: 4809
34
C++若引入GC的话,我第一个反对,直接用我的C或者C++98去,或者干脆上Java了。

【在 b*******s 的大作中提到】
: 可选模式,而且不一定委员会会批,就是个别人在鼓吹
h*******u
发帖数: 15326
35
这个不用。net用不到

【在 a***n 的大作中提到】
:
: 曾今调试一个新手的程序,发现5%的时间是ref count。其实也没有什么太过分,不过
: 显然不够快。

l*********s
发帖数: 5409
36
It is useful (1) for RIIA (2) library interface.

【在 z****g 的大作中提到】
: 这个效率一般是个小问题
: 用shared ptr 让人觉得没有明确得ownership,概念不清楚,不符合C++程序员
: 对确定性的期待,搞的堕落成Java,不喜欢
: 不过个别时候也没更好的选择

h*******u
发帖数: 15326
37
矩阵类关键看你想怎么玩线性代数算法
要么用现成类库,但是接口在那摆着
要么自己写矩阵,但是上层要自己搞

【在 N******K 的大作中提到】
: 这也是我为什要自己写matrix类的原因 因为可能要多线程等等
: eigen类库有个搞笑的bug 还不好意思说是bug
: a=a.transpose(); 这个结果就会出错 不知道怎么搞的

o**o
发帖数: 3964
38
矩阵库干嘛重写。多半没有现成的好。

【在 h*******u 的大作中提到】
: 矩阵类关键看你想怎么玩线性代数算法
: 要么用现成类库,但是接口在那摆着
: 要么自己写矩阵,但是上层要自己搞

h*******u
发帖数: 15326
39
我曾经写过一个,模版的。开始方便无比。后来要上各种分解求逆特征值的时候煞笔了
,要造无数轮子。
干脆直接上GSL了事,性能还不错,哈哈

【在 o**o 的大作中提到】
: 矩阵库干嘛重写。多半没有现成的好。
t****t
发帖数: 6806
40
要是为这种事情重写matrix类那真是吃力不讨好. matlab从很早开始就是copy-on-
write了.

【在 N******K 的大作中提到】
: 这也是我为什要自己写matrix类的原因 因为可能要多线程等等
: eigen类库有个搞笑的bug 还不好意思说是bug
: a=a.transpose(); 这个结果就会出错 不知道怎么搞的

相关主题
这个月在用c++造轮子,从一维数组开始造c++ question
不如各位高手挑个专题讲讲C++11吧一道很奇怪的面试题
one more interview questionPython Q: function pass in struct pointer, come back with data filled
进入Programming版参与讨论
t****t
发帖数: 6806
41
滥用当然是不行的.
但是有些事情就是没有ownership, 你硬要搞一个ownership出来也不见得自然. 比如对
表达式的evaluation, 我觉得用一个shared_ptr是个可以接受的方案, 即
immutable value. 但在对lvalue进行支持的时候显然就必须换一个类型.

【在 z****g 的大作中提到】
: 这个效率一般是个小问题
: 用shared ptr 让人觉得没有明确得ownership,概念不清楚,不符合C++程序员
: 对确定性的期待,搞的堕落成Java,不喜欢
: 不过个别时候也没更好的选择

N******K
发帖数: 10202
42
当然不是为了这个了 吃饱了撑的重复劳动

【在 t****t 的大作中提到】
: 要是为这种事情重写matrix类那真是吃力不讨好. matlab从很早开始就是copy-on-
: write了.

1 (共1页)
进入Programming版参与讨论
相关主题
c++指针的问题不如各位高手挑个专题讲讲C++11吧
C++的smart pointer注定是个二流的东西one more interview question
琢磨了一下c++ smart pointer,发现不能到处用c++ question
C++问题: 指针变量是哪里产生的?一道很奇怪的面试题
问一个关于C++指针的问题Python Q: function pass in struct pointer, come back with data filled
问个C++中重复删除指针的问题C 里面有办法永久改变一个指针的属性吗?
一道c++的考古题difference between: char** p and char*p[] ??
这个月在用c++造轮子,从一维数组开始造C++ pointer problem
相关话题的讨论汇总
话题: pointer话题: 指针话题: struct话题: pixel话题: byte