1
mikicomo 2017-02-12 11:02:33 +08:00
绝大多数编译器都支持了吧,这是 GCC 对 C99 的支持程度
http://gcc.gnu.org/c99status.html |
2
htfy96 2017-02-12 11:19:47 +08:00 via Android
不然你怎么在栈上分配变长对象?不考虑 alloca 这类东西
|
3
jarell 2017-02-12 11:25:43 +08:00
非常有用的东西了啊
|
4
CRVV 2017-02-12 11:34:24 +08:00
最新的 "The C Programming Language" 是 1988 年出版的,怎么可能写 C99 的特性
|
5
jox0 2017-02-12 11:44:27 +08:00 2
不是单纯的语法糖展开, VLA 的长度在运行时决定,开发者无法判断 VLA 的内存是分配在 stack 上还是 heap 上, GCC 会在 stack 上分配内存,长度受 SIZE_MAX 限制,无法检查内存是否分配成功,声明后无法改变长度。
总的来说会用到的地方不多,建议尽量不要使用 |
6
Cbdy OP @jox0 我刚刚大概在爆栈 网上看了一下, VLA 的实现的时候通常是在栈上的,作用域结束或者调用栈弹出就释放了(不同 于 malloc ),引入主要是为了提供一个可以分配可变数组但是开销 比小 malloc 的特性,取代一部分 malloc 的功能。感觉确实是个好东西
>VLA were introduced as run-time-sized arrays with low allocation/deallocation cost. They fit between "ordinary" named compile-time-sized arrays (which have virtually zero allocation-deallocation cost, but fixed size) and malloc-ed arrays (which have run-time size, but relatively high allocation-deallocation cost). http://stackoverflow.com/questions/2034712/is-there-any-overhead-for-using-variable-length-arrays |
7
owt5008137 2017-02-12 16:58:25 +08:00 via Android 1
VC++不会去支持 c99 特性的。而且已经被从 c++标准里移除了
其他的嘛,看看这个呗 https://gcc.gnu.org/projects/cxx-status.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html 一般 gcc 支持的特性 VC++以外的其他编译器都会跟 |
8
firebroo 2017-02-12 18:06:20 +08:00
微软宣称只支持 c89
|
9
srlp 2017-02-12 18:09:50 +08:00 via iPhone
可能有用,但是能不用就不要用了。而且这和 cpp 不兼容。
http://stackoverflow.com/questions/1887097/why-arent-variable-length-arrays-part-of-the-c-standard |
10
araraloren 2017-02-13 09:08:02 +08:00
不是单纯的语法糖
`C11`已经把这一条变成可选支持的了,这东西不是必须得用的,自己`malloc`吧。 |
11
linux40 2017-02-13 09:31:32 +08:00 via Android
没有标准的栈可变内存申请接口,这就是两种中的一种。。。你也可以 char[],然后 cast 。。。
|
12
linux40 2017-02-13 09:36:17 +08:00 via Android
这样要注意对齐。。。
|
13
zonyitoo 2017-02-13 10:47:13 +08:00 1
在 C99 之前本身就有一个 alloca 函数可以让你在栈上分配连续内存。所以这个在绝大多平台上来讲,的确就是个糖
http://man7.org/linux/man-pages/man3/alloca.3.html https://msdn.microsoft.com/en-us/library/wb1s57t5.aspx 但 alloca 本身就有很多讨论是不建议使用,因此要不要使用 VLA ,自己分析吧。我个人是觉得没有太大的用处。 |