Структура Sizeof в Движении

Я взглянул на Движение, которое выглядит довольно многообещающим. Я пытаюсь выяснить, как получить размер структуры движения, например, что-то как

type Coord3d struct {
    X, Y, Z int64
}

Конечно, я знаю, что это - 24 байта, но я хотел бы знать это программно..

У Вас есть какие-либо идеи, как сделать это?

20
задан kennytm 1 May 2010 в 06:33
поделиться

4 ответа

import unsafe "unsafe"

/* Structure describing an inotify event.  */
type INotifyInfo struct {
    Wd     int32  // Watch descriptor
    Mask   uint32 // Watch mask
    Cookie uint32 // Cookie to synchronize two events
    Len    uint32 // Length (including NULs) of name
}

func doSomething() {
    var info INotifyInfo
    const infoSize = unsafe.Sizeof(info)
    ...
}

Примечание: OP ошибается. Unsafe.sizeof возвращается 24 на примере CORD3D struct. Смотрите комментарий ниже.

33
ответ дан 29 November 2019 в 22:40
поделиться
for (Car car : carsList) {  // carsList is the object of List<Car>
    System.out.println(car);
}

Примечание. Приведенное выше отобразится значимое сообщение только при переоценке метода TOSTRING () класса автомобиля.

E.G

public class Car {

    private String carName;

    ....
    ....

    public String toString() {
        return carName;
    }
}

Метод TOSTRING () должен быть переопределен для возврата значимой информации о объекте в форме строки.

В вашем случае, я думаю, что значимая информация будет все детали автомобиля. Таким образом, метод переопределения TOSTRING () является лучшим подходом вместо использования GetCarkAme () или аналогичных методов.

-121--3030975-

Двоичный. Тетальсизм также является вариантом, но отмечают, что есть небольшая разница в поведении между этим и unsafe.sizeof: двоичный .totalsize включает размер содержимого ломтиков, в то время как небезопасно. Возвращает размер дескриптора верхнего уровня. Вот пример того, как использовать итоги.

package main

import (
    "encoding/binary"
    "fmt"
    "reflect"
)

type T struct {
    a uint32
    b int8
}

func main() {
    var t T
    r := reflect.ValueOf(t)
    s := binary.TotalSize(r)

    fmt.Println(s)
}
7
ответ дан 29 November 2019 в 22:40
поделиться

Для полноты: Entholed имеет распределение Python, которое включает в себя Scipy; Тем не менее, это не бесплатно. Будьте: я никогда не использовал это.

Обновление: этот ответ давно забыл до тех пор, пока экспторы не верну мне обратно. В это время, я буду вторым эндолиты-х предположение из Анаконда , который является бесплатным.

-121--920358-

см. В бинарном . Специально метод

1
ответ дан 29 November 2019 в 22:40
поделиться

Это может быть изменено, но в последний раз я обнаружил нерешенную ошибку компилятора (bug260.go), связанную с выравниванием структуры. Конечным результатом является то, что упаковка конструкции может не дать ожидаемых результатов. Это было для компилятора 6g версии 5383 выпуска 2010-04-27. Возможно, это не повлияет на ваши результаты, но об этом следует знать.

ОБНОВЛЕНИЕ: Единственная ошибка, оставшаяся в наборе тестов go, - это bug260.go, упомянутая выше, начиная с выпуска 2010-05-04.

Хотей

1
ответ дан 29 November 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: